Di Jawa, saya memiliki teks dari bidang teks dalam sebuah variabel String yang disebut "text".
Bagaimana saya bisa menyimpan isi dari "text" variabel ke file?
Jika anda're hanya keluaran teks, daripada setiap data biner, berikut ini akan bekerja:
PrintWriter out = new PrintWriter("filename.txt");
Kemudian, menulis String untuk itu, seperti yang anda lakukan untuk setiap output stream:
out.println(text);
Anda'll perlu penanganan eksepsi, seperti biasa. Pastikan untuk menelepon keluar.close()
ketika anda've selesai menulis.
Jika anda menggunakan Java 7 atau yang lebih baru, anda dapat menggunakan "try-with-sumber daya pernyataan" yang akan secara otomatis menutup PrintStream
ketika anda selesai dengan hal itu (yaitu keluar dari blok) seperti:
try (PrintWriter out = new PrintWriter("filename.txt")) {
out.println(text);
}
Anda masih akan perlu untuk secara eksplisit melemparkan jawa.io.FileNotFoundException
seperti sebelumnya.
Apache Commons IO berisi beberapa metode yang bagus untuk melakukan hal ini, khususnya FileUtils berisi metode berikut:
static void writeStringToFile(File file, String data)
yang memungkinkan anda untuk menulis teks ke file dalam satu metode hubungi:
FileUtils.writeStringToFile(new File("test.txt"), "Hello File");
Anda juga mungkin ingin mempertimbangkan untuk menetapkan pengkodean untuk file juga.
Lihatlah File Java API
contoh cepat:
try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
out.print(text);
}
Hanya melakukan sesuatu yang serupa di proyek saya. Gunakan FileWriter akan menyederhanakan bagian dari pekerjaan anda. Dan di sini anda dapat menemukan bagus tutorial.
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)
{
}
}
Di Jawa 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
Gunakan FileUtils.writeStringToFile()
dari Apache Commons IO. Tidak perlu untuk menemukan kembali hal ini khususnya roda.
Anda dapat menggunakan dan memodifikasi kode di bawah ini untuk mendapatkan file dari apapun kelas atau fungsi adalah penanganan teks. Salah satu keajaiban meskipun mengapa dunia membutuhkan sebuah 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();
}
}
}
Di Jawa 11 the jawa.nio.file.File
kelas diperpanjang oleh dua utilitas baru metode untuk menulis string ke dalam sebuah 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 individu charset:
Files.writeString(Path.of("my", "path"), "My String", StandardCharset.ISO_8859_1);
Kedua metode memiliki opsional Varargs parameter untuk menetapkan penanganan file pilihan (lihat JavaDoc di sini). Contoh berikut akan membuat non-file yang sudah ada atau menambahkan string untuk aplikasi yang sudah ada:
Files.writeString(Path.of("my", "path"), "String to append", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
Dalam kasus jika anda perlu membuat file teks berdasarkan salah satu single string:
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();
}
}
}
Menggunakan Apache Commons IO api. Sederhana
Menggunakan API sebagai
FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");
Maven Ketergantungan
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
Saya lebih memilih untuk mengandalkan perpustakaan sebisa mungkin untuk jenis operasi. Hal ini membuat saya kurang mungkin untuk sengaja menghilangkan satu langkah penting (seperti kesalahan wolfsnipes dibuat di atas). Beberapa perpustakaan yang disarankan di atas, tapi favorit saya untuk hal semacam ini Google Jambu. Jambu biji memiliki kelas yang disebut File yang bekerja 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
}
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 menyisipkan metode ini ke dalam kelas anda. Jika anda menggunakan metode di kelas dengan metode utama, perubahan kelas ini untuk statis dengan menambahkan static kata kunci. Entah cara anda akan perlu untuk mengimpor java.io.* untuk membuatnya bekerja jika tidak, File, FileWriter dan BufferedWriter tidak akan diakui.
Menggunakan Jawa 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);
}
Anda bisa lakukan 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 ;
}
};
Jika anda hanya peduli tentang mendorong satu blok dari teks ke file, ini akan menimpa setiap waktu.
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 sebuah file menggunakan file chooser.
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 adalah menggunakan File.menulis(Path, Iterable<? meluas CharSequence> garis, OpenOption... pilihan)
:
String text = "content";
Path path = Paths.get("path", "to", "file");
Files.write(path, Arrays.asList(text));
Lihat javadoc:
Menulis baris teks ke file. Setiap baris adalah char urutan dan ditulis ke file dalam urutan dengan setiap baris diakhiri oleh platform's garis pemisah, seperti yang didefinisikan oleh sistem properti line.pemisah. Karakter yang dikodekan ke dalam byte menggunakan ditentukan charset.
pilihan parameter ini menentukan bagaimana file yang dibuat atau dibuka. Jika tidak ada opsi yang hadir kemudian metode ini bekerja seolah-olah MEMBUAT, TRUNCATE_EXISTING, dan MENULIS opsi yang hadir. Dengan kata lain, itu membuka file untuk menulis, membuat file jika itu doesn't ada, atau awalnya truncating yang ada biasa-file dengan ukuran 0. Yang metode ini memastikan bahwa file tersebut ditutup ketika semua baris telah ditulis (atau I/O error atau runtime exception dilemparkan). Jika I/O terjadi kesalahan maka dapat melakukannya setelah file telah dibuat atau terpotong, atau setelah beberapa byte yang telah ditulis ke file.
Harap dicatat. Saya melihat orang-orang yang sudah menjawab dengan Java's built-in File.menulis
, tapi apa yang's khusus dalam jawaban saya yang tak seorang pun tampaknya untuk menyebutkan kelebihan beban versi dari metode yang mengambil Iterable dari CharSequence (yaitu String), bukan byte[]
array, dengan demikian teks.getBytes()
adalah tidak diperlukan, yang sedikit saya pikir.