Di Jawa, saya memiliki teks dari bidang teks dalam variabel String yang disebut "teks".
Bagaimana saya bisa menyimpan konten variabel "teks" ke file?
Di Jawa, saya memiliki teks dari bidang teks dalam variabel String yang disebut "teks".
Bagaimana saya bisa menyimpan konten variabel "teks" ke file?
Jawaban:
Jika Anda hanya menghasilkan teks, daripada data biner apa pun, yang berikut ini akan berfungsi:
PrintWriter out = new PrintWriter("filename.txt");
Kemudian, tulis String Anda ke sana, sama seperti yang Anda lakukan pada aliran output apa pun:
out.println(text);
Anda akan memerlukan penanganan pengecualian, seperti biasa. Pastikan untuk menelepon out.close()
saat Anda selesai menulis.
Jika Anda menggunakan Java 7 atau lebih baru, Anda dapat menggunakan "pernyataan try-with-resources " yang akan secara otomatis menutup Anda PrintStream
ketika Anda selesai menggunakannya (mis. Keluar dari blok) seperti:
try (PrintWriter out = new PrintWriter("filename.txt")) {
out.println(text);
}
Anda masih harus melempar secara eksplisit java.io.FileNotFoundException
seperti sebelumnya.
Apache Commons IO berisi beberapa metode hebat untuk melakukan ini, khususnya FileUtils berisi metode berikut:
static void writeStringToFile(File file, String data)
yang memungkinkan Anda untuk menulis teks ke file dalam satu panggilan metode:
FileUtils.writeStringToFile(new File("test.txt"), "Hello File");
Anda mungkin juga ingin mempertimbangkan untuk menentukan penyandian file.
FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
Lihatlah Java File API
contoh cepat:
try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
out.print(text);
}
@Cleanup new FileOutputStream(...)
dan Anda sudah selesai.
Di Java 7 Anda dapat melakukan ini:
String content = "Hello File!";
String path = "C:/a.txt";
Files.write( Paths.get(path), content.getBytes());
Ada info lebih lanjut di sini: http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403
content.getBytes(StandardCharsets.UTF_8)
dapat digunakan untuk secara eksplisit mendefinisikan pengkodean.
Baru saja melakukan hal serupa di proyek saya. Gunakan FileWriter akan menyederhanakan bagian dari pekerjaan Anda. Dan di sini Anda dapat menemukan tutorial yang bagus .
BufferedWriter writer = null;
try
{
writer = new BufferedWriter( new FileWriter( yourfilename));
writer.write( yourstring);
}
catch ( IOException e)
{
}
finally
{
try
{
if ( writer != null)
writer.close( );
}
catch ( IOException e)
{
}
}
.close()
tidak melempar (setidaknya di Java 7?), Apakah trycatch terakhir mungkin berlebihan?
throw new RuntimeException(e);
Gunakan FileUtils.writeStringToFile()
dari Apache Commons IO . Tidak perlu menemukan kembali roda khusus ini.
Anda dapat menggunakan modifikasi kode di bawah ini untuk menulis file Anda dari kelas atau fungsi apa pun yang menangani teks. Orang bertanya-tanya mengapa dunia membutuhkan editor teks baru ...
import java.io.*;
public class Main {
public static void main(String[] args) {
try {
String str = "SomeMoreTextIsHere";
File newTextFile = new File("C:/thetextfile.txt");
FileWriter fw = new FileWriter(newTextFile);
fw.write(str);
fw.close();
} catch (IOException iox) {
//do stuff with exception
iox.printStackTrace();
}
}
}
Dalam Java 11 yang java.nio.file.Files
kelas diperpanjang dengan dua metode utilitas baru untuk menulis string ke dalam file. Metode pertama (lihat JavaDoc di sini ) menggunakan charset UTF-8 sebagai default:
Files.writeString(Path.of("my", "path"), "My String");
Dan metode kedua (lihat JavaDoc di sini ) memungkinkan untuk menentukan charset individual:
Files.writeString(Path.of("my", "path"), "My String", StandardCharset.ISO_8859_1);
Kedua metode memiliki parameter Varargs opsional untuk mengatur opsi penanganan file (lihat JavaDoc di sini ). Contoh berikut akan membuat file yang tidak ada atau menambahkan string ke yang sudah ada:
Files.writeString(Path.of("my", "path"), "String to append", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
Saya lebih suka mengandalkan perpustakaan bila memungkinkan untuk operasi semacam ini. Ini membuat saya cenderung tidak sengaja menghilangkan langkah penting (seperti kesalahan yang dilakukan oleh wolfsnipes di atas). Beberapa perpustakaan disarankan di atas, tetapi favorit saya untuk hal semacam ini adalah Google Guava . Guava memiliki kelas yang disebut File yang berfungsi dengan baik untuk tugas ini:
// This is where the file goes.
File destination = new File("file.txt");
// This line isn't needed, but is really useful
// if you're a beginner and don't know where your file is going to end up.
System.out.println(destination.getAbsolutePath());
try {
Files.write(text, destination, Charset.forName("UTF-8"));
} catch (IOException e) {
// Useful error handling here
}
Charsets.UTF-8
.
Charsets.UTF_8
Sebenarnya
Files.asCharSink(file, charset).write(text)
Gunakan api Apache Commons IO. Itu mudah
Gunakan API sebagai
FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");
Ketergantungan Maven
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
Jika Anda perlu membuat file teks berdasarkan satu string tunggal:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class StringWriteSample {
public static void main(String[] args) {
String text = "This is text to be saved in file";
try {
Files.write(Paths.get("my-file.txt"), text.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Gunakan ini, sangat mudah dibaca:
import java.nio.file.Files;
import java.nio.file.Paths;
Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);
import java.io.*;
private void stringToFile( String text, String fileName )
{
try
{
File file = new File( fileName );
// if file doesnt exists, then create it
if ( ! file.exists( ) )
{
file.createNewFile( );
}
FileWriter fw = new FileWriter( file.getAbsoluteFile( ) );
BufferedWriter bw = new BufferedWriter( fw );
bw.write( text );
bw.close( );
//System.out.println("Done writing to " + fileName); //For testing
}
catch( IOException e )
{
System.out.println("Error: " + e);
e.printStackTrace( );
}
} //End method stringToFile
Anda dapat memasukkan metode ini ke dalam kelas Anda. Jika Anda menggunakan metode ini di kelas dengan metode utama, ubah kelas ini menjadi statis dengan menambahkan kata kunci statis. Apa pun caranya, Anda perlu mengimpor java.io. * untuk membuatnya berfungsi jika tidak, File, FileWriter dan BufferedWriter tidak akan dikenali.
Anda bisa melakukan ini:
import java.io.*;
import java.util.*;
class WriteText
{
public static void main(String[] args)
{
try {
String text = "Your sample content to save in a text file.";
BufferedWriter out = new BufferedWriter(new FileWriter("sample.txt"));
out.write(text);
out.close();
}
catch (IOException e)
{
System.out.println("Exception ");
}
return ;
}
};
Menggunakan Java 7
:
public static void writeToFile(String text, String targetFilePath) throws IOException
{
Path targetPath = Paths.get(targetFilePath);
byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
Files.write(targetPath, bytes, StandardOpenOption.CREATE);
}
Files.write(targetPath, bytes);
untuk menimpa file itu. Ini akan berfungsi seperti yang diharapkan.
Menggunakan org.apache.commons.io.FileUtils:
FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());
Jika Anda hanya ingin mendorong satu blok teks ke file, ini akan menimpa setiap kali.
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
FileOutputStream stream = null;
PrintStream out = null;
try {
File file = chooser.getSelectedFile();
stream = new FileOutputStream(file);
String text = "Your String goes here";
out = new PrintStream(stream);
out.print(text); //This will overwrite existing contents
} catch (Exception ex) {
//do something
} finally {
try {
if(stream!=null) stream.close();
if(out!=null) out.close();
} catch (Exception ex) {
//do something
}
}
}
Contoh ini memungkinkan pengguna untuk memilih file menggunakan pemilih file.
Lebih baik untuk menutup penulis / keluaran di blok akhirnya, kalau-kalau terjadi sesuatu
finally{
if(writer != null){
try{
writer.flush();
writer.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}
private static void generateFile(String stringToWrite, String outputFile) {
try {
FileWriter writer = new FileWriter(outputFile);
writer.append(stringToWrite);
writer.flush();
writer.close();
log.debug("New File is generated ==>"+outputFile);
} catch (Exception exp) {
log.error("Exception in generateFile ", exp);
}
}
Saya pikir cara terbaik menggunakan Files.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options)
:
String text = "content";
Path path = Paths.get("path", "to", "file");
Files.write(path, Arrays.asList(text));
Lihat javadoc :
Tulis baris teks ke file. Setiap baris adalah urutan char dan ditulis ke file secara berurutan dengan setiap baris diakhiri oleh pemisah baris platform, seperti yang didefinisikan oleh line.separator properti sistem. Karakter dikodekan ke dalam byte menggunakan charset yang ditentukan.
Parameter opsi menentukan bagaimana file dibuat atau dibuka. Jika tidak ada opsi, maka metode ini berfungsi seolah-olah opsi CREATE, TRUNCATE_EXISTING, dan WRITE hadir. Dengan kata lain, itu membuka file untuk menulis, membuat file jika tidak ada, atau awalnya memotong file biasa yang ada ke ukuran 0. Metode ini memastikan bahwa file ditutup ketika semua baris telah ditulis ( atau kesalahan I / O atau pengecualian runtime lainnya dilemparkan). Jika kesalahan I / O terjadi maka ia dapat melakukannya setelah file dibuat atau terpotong, atau setelah beberapa byte ditulis ke file.
Tolong dicatat. Saya melihat orang-orang sudah menjawab dengan built-in Java Files.write
, tetapi apa yang istimewa dalam jawaban saya yang tampaknya tidak ada yang menyebutkan adalah versi overload dari metode yang mengambil Iterable dari CharSequence (yaitu String), bukan byte[]
array, sehingga text.getBytes()
tidak diperlukan , yang agak bersih menurut saya.
Jika Anda ingin menjaga karakter carriage return dari string ke dalam file di sini adalah contoh kode:
jLabel1 = new JLabel("Enter SQL Statements or SQL Commands:");
orderButton = new JButton("Execute");
textArea = new JTextArea();
...
// String captured from JTextArea()
orderButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// When Execute button is pressed
String tempQuery = textArea.getText();
tempQuery = tempQuery.replaceAll("\n", "\r\n");
try (PrintStream out = new PrintStream(new FileOutputStream("C:/Temp/tempQuery.sql"))) {
out.print(tempQuery);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(tempQuery);
}
});
Cara saya didasarkan pada streaming karena berjalan di semua versi Android dan kebutuhan sumber daya fecthing seperti URL / URI, ada saran dipersilahkan.
Sejauh yang terkait, stream (InputStream dan OutputStream) mentransfer data biner, ketika pengembang menulis string ke stream, pertama-tama harus mengubahnya menjadi byte, atau dengan kata lain menyandikannya.
public boolean writeStringToFile(File file, String string, Charset charset) {
if (file == null) return false;
if (string == null) return false;
return writeBytesToFile(file, string.getBytes((charset == null) ? DEFAULT_CHARSET:charset));
}
public boolean writeBytesToFile(File file, byte[] data) {
if (file == null) return false;
if (data == null) return false;
FileOutputStream fos;
BufferedOutputStream bos;
try {
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(data, 0, data.length);
bos.flush();
bos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
Logger.e("!!! IOException");
return false;
}
return true;
}
Anda dapat menggunakan ArrayList untuk meletakkan semua isi TextArea sebagai contoh, dan mengirim sebagai parameter dengan memanggil save, karena penulis hanya menulis baris string, maka kita menggunakan baris "untuk" baris demi baris untuk menulis ArrayList pada akhirnya kami akan konten TextArea dalam file txt. jika ada yang tidak masuk akal, saya minta maaf adalah penerjemah google dan saya yang tidak bisa berbahasa inggris.
Tonton Notepad Windows, itu tidak selalu lompat garis, dan menunjukkan semua dalam satu baris, gunakan Wordpad ok.
private void SaveActionPerformed(java.awt.event.ActionEvent evt) {
String NameFile = Name.getText();
ArrayList< String > Text = new ArrayList< String >();
Text.add(TextArea.getText());
SaveFile(NameFile, Text);
}
public void SaveFile(String name, ArrayList< String> message) {
path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt";
File file1 = new File(path);
try {
if (!file1.exists()) {
file1.createNewFile();
}
File[] files = file1.listFiles();
FileWriter fw = new FileWriter(file1, true);
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < message.size(); i++) {
bw.write(message.get(i));
bw.newLine();
}
bw.close();
fw.close();
FileReader fr = new FileReader(file1);
BufferedReader br = new BufferedReader(fr);
fw = new FileWriter(file1, true);
bw = new BufferedWriter(fw);
while (br.ready()) {
String line = br.readLine();
System.out.println(line);
bw.write(line);
bw.newLine();
}
br.close();
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Error in" + ex);
}
}