Apa cara paling sederhana untuk membuat dan menulis ke file (teks) di Jawa?
1383
Perhatikan bahwa masing-masing contoh kode di bawah ini dapat dibuang IOException
. Coba / tangkap / akhirnya blok dihilangkan karena singkatnya. Lihat tutorial ini untuk informasi tentang penanganan pengecualian.
Perhatikan bahwa masing-masing contoh kode di bawah ini akan menimpa file jika sudah ada
Membuat file teks:
PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
Membuat file biner:
byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();
Pengguna Java 7+ dapat menggunakan Files
kelas untuk menulis ke file:
Membuat file teks:
List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, StandardCharsets.UTF_8);
//Files.write(file, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);
Membuat file biner:
byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);
"PrintWriter prints formatted representations of objects to a text-output stream. "
jawaban Bozho lebih benar, meskipun terlihat rumit (Anda selalu dapat membungkusnya dengan beberapa metode utilitas).writer.close()
harus di blok akhirnyaDi Jawa 7 dan lebih tinggi:
Ada beberapa utilitas yang berguna untuk itu:
Perhatikan juga bahwa Anda dapat menggunakan
FileWriter
, tetapi menggunakan penyandian default, yang seringkali merupakan ide yang buruk - yang terbaik adalah menentukan penyandian secara eksplisit.Di bawah ini adalah jawaban asli, sebelum Jawa 7
Lihat juga: Membaca, Menulis, dan Membuat File (termasuk NIO2).
sumber
close()
sembarang aliran yang melilit yang lain akan menutup semua aliran dalam juga.Jika Anda sudah memiliki konten yang ingin Anda tulis ke file (dan tidak dihasilkan dengan cepat),
java.nio.file.Files
penambahan di Java 7 sebagai bagian dari I / O asli menyediakan cara paling sederhana dan paling efisien untuk mencapai tujuan Anda.Pada dasarnya membuat dan menulis ke file hanya satu baris, apalagi satu panggilan metode sederhana !
Contoh berikut membuat dan menulis ke 6 file berbeda untuk menunjukkan bagaimana itu dapat digunakan:
sumber
sumber
output.close()
melempar IOExceptionBerikut adalah sedikit contoh program untuk membuat atau menimpa file. Ini versi yang panjang sehingga dapat dipahami dengan lebih mudah.
sumber
Cara yang sangat sederhana untuk membuat dan menulis ke file di Java:
sumber
File.exists()/createNewFile()
kode di sini adalah baik sia-sia dan boros. Sistem operasi sudah harus melakukan hal yang persis sama ketikanew FileWriter()
dibuat. Anda memaksakan itu terjadi dua kali.FileWriter
sebagai berikut:new FileWriter(file.getAbsoluteFile(),true)
Menggunakan:
Menggunakan
try()
akan menutup streaming secara otomatis. Versi ini pendek, cepat (buffered) dan memungkinkan memilih pengodeanFitur ini diperkenalkan di Java 7.
sumber
StandardCharsets.UTF_8
alih-alih String "utf-8" (Ini mencegah kesalahan kesalahan ketik)...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)...
-java.nio.charset.StandardCharsets
diperkenalkan di java 7Di sini kita memasukkan string ke file teks:
Kita dapat dengan mudah membuat file baru dan menambahkan konten ke dalamnya.
sumber
Karena penulis tidak menentukan apakah mereka memerlukan solusi untuk versi Java yang telah EoL (oleh Sun dan IBM, dan ini secara teknis adalah JVM yang paling luas), dan karena kenyataan bahwa kebanyakan orang tampaknya telah menjawab pertanyaan penulis sebelum ditentukan bahwa itu adalah file teks (non-biner) , saya telah memutuskan untuk memberikan jawaban saya.
Pertama-tama, Java 6 secara umum telah mencapai akhir masa pakainya, dan karena penulis tidak menentukan ia membutuhkan kompatibilitas sebelumnya, saya kira itu secara otomatis berarti Java 7 atau lebih tinggi (Java 7 belum dimatikan oleh IBM). Jadi, kita dapat melihat langsung di file I / O tutorial: https://docs.oracle.com/javase/tutorial/essential/io/legacy.html
Oh well, itu mengesampingkan java.io.File. Jika suatu file tidak dapat ditulis / ditambahkan, Anda mungkin tidak dapat mengetahui alasannya.
Kita dapat terus melihat tutorialnya: https://docs.oracle.com/javase/tutorial/essential/io/file.html#common
Jika Anda memiliki semua baris yang akan Anda tulis (tambahkan) ke file teks sebelumnya , pendekatan yang disarankan adalah https://docs.oracle.com/javase/8/docs/api/java/nio/fio/files/Files.html# tulis-java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset-java.nio.file.OpenOption ...-
Berikut ini contoh (disederhanakan):
Contoh lain (tambahkan):
Jika Anda ingin menulis konten file saat berjalan : https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java .nio.charset.Charset-java.nio.file.OpenOption ...-
Contoh sederhana (Java 8 atau lebih tinggi):
Contoh lain (tambahkan):
Metode-metode ini membutuhkan usaha minimal dari pihak penulis dan harus disukai semua orang lain ketika menulis ke file [teks].
sumber
FileNotFoundException
yang dilemparkan ketika operasi gagal.Jika Anda ingin memiliki pengalaman yang relatif bebas rasa sakit, Anda juga dapat melihat paket Apache Commons IO , lebih khusus
FileUtils
kelasnya .Jangan pernah lupa untuk memeriksa perpustakaan pihak ketiga. Joda-Time untuk manipulasi tanggal, Apache Commons Lang
StringUtils
untuk operasi string umum dan semacamnya dapat membuat kode Anda lebih mudah dibaca.Java adalah bahasa yang hebat, tetapi pustaka standar terkadang agak rendah. Tetap kuat, tapi level rendah.
sumber
FileUtils
adalahstatic void write(File file, CharSequence data)
. Contoh penggunaan:import org.apache.commons.io.FileUtils;
FileUtils.write(new File("example.txt"), "string with data");
.FileUtils
juga memilikiwriteLines
, yang mengambilCollection
garis.Jika Anda karena alasan tertentu ingin memisahkan tindakan membuat dan menulis, setara Java
touch
adalahcreateNewFile()
melakukan pemeriksaan keberadaan dan file buat secara atom. Ini bisa bermanfaat jika Anda ingin memastikan bahwa Anda adalah pembuat file sebelum menulis, misalnya.sumber
touch
dalam arti umum tetapi lebih pada penggunaan sekunder umum untuk membuat file tanpa menulis data untuk itu. Tujuan sentuhan yang didokumentasikan adalah untuk memperbarui stempel waktu pada file. Membuat file jika tidak ada sebenarnya adalah efek samping, dan dapat dinonaktifkan dengan sakelar.exists()/createNewFile()
urutan secara harfiah membuang-buang waktu dan ruang.Berikut adalah beberapa cara yang memungkinkan untuk membuat dan menulis file di Java:
Menggunakan FileOutputStream
Menggunakan FileWriter
Menggunakan PrintWriter
Menggunakan OutputStreamWriter
Untuk lebih lanjut periksa tutorial ini tentang Cara membaca dan menulis file di Jawa .
sumber
FileWriter
atauOutputStreamWriter
ditutup pada akhirnya blok?Menggunakan:
sumber
Cara terbaik adalah menggunakan Java7: Java 7 memperkenalkan cara baru untuk bekerja dengan filesystem, bersama dengan kelas utilitas baru - File. Menggunakan kelas Files, kita dapat membuat, memindahkan, menyalin, menghapus file dan direktori juga; itu juga dapat digunakan untuk membaca dan menulis ke file.
Menulis dengan FileChannel Jika Anda berurusan dengan file besar, FileChannel bisa lebih cepat daripada IO standar. Kode berikut menulis String ke file menggunakan FileChannel:
Menulis dengan DataOutputStream
Menulis dengan FileOutputStream
Sekarang mari kita lihat bagaimana kita dapat menggunakan FileOutputStream untuk menulis data biner ke file. Kode berikut mengkonversi byte int String dan menulis byte ke file menggunakan FileOutputStream:
Menulis dengan PrintWriter kita dapat menggunakan PrintWriter untuk menulis teks berformat ke file:
Menulis dengan BufferedWriter: gunakan BufferedWriter untuk menulis sebuah String ke file baru:
tambahkan sebuah String ke file yang ada:
sumber
Saya pikir ini adalah cara terpendek:
sumber
Untuk membuat file tanpa menimpa file yang ada:
sumber
sumber
exists()/createNewFile()
urutan secara harfiah membuang-buang waktu dan ruang.sumber
exists()/createNewFile()
urutan secara harfiah membuang-buang waktu dan ruang.Hanya satu baris!
path
danline
Stringssumber
lines
. Jika yajava.lang.String
, maka panggilangetBytes()
akan menghasilkan byte menggunakan platform default encoding, yang tidak terlalu baik dalam kasus umum.Cara paling sederhana yang bisa saya temukan:
Mungkin hanya akan berfungsi untuk 1.7+.
sumber
Layak dicoba untuk Java 7+:
Itu terlihat menjanjikan ...
sumber
Jika kita menggunakan Java 7 dan di atasnya dan juga tahu konten yang akan ditambahkan (ditambahkan) ke file kita dapat menggunakan metode newBufferedWriter dalam paket NIO.
Ada beberapa hal yang perlu diperhatikan:
StandardCharsets
.try-with-resource
pernyataan di mana sumber daya secara otomatis ditutup setelah percobaan.Meskipun OP belum bertanya tetapi untuk berjaga-jaga jika kita ingin mencari baris yang memiliki beberapa kata kunci spesifik misalnya
confidential
kita dapat menggunakan stream API di Jawa:sumber
Membaca dan menulis file menggunakan input dan outputstream:
sumber
Cukup sertakan paket ini:
Dan kemudian Anda dapat menggunakan kode ini untuk menulis file:
sumber
Di Java 8 gunakan Files and Paths dan gunakan konstruksi try-with-resources.
sumber
Ada beberapa cara sederhana, seperti:
sumber
bw
tidak digunakan.Anda bahkan dapat membuat file sementara menggunakan properti sistem , yang tidak tergantung pada OS yang Anda gunakan.
sumber
Menggunakan perpustakaan Guava Google, kita dapat membuat dan menulis ke file dengan sangat mudah.
Contoh membuat
fruits.txt
file baru di direktori root proyek.sumber
Membaca koleksi dengan pelanggan dan menyimpan ke file, dengan JFilechooser.
sumber
Setidaknya ada beberapa cara membuat file dan menulisnya:
File kecil (1.7)
Anda dapat menggunakan salah satu metode menulis untuk menulis byte, atau baris, ke file.
Metode ini menangani sebagian besar pekerjaan untuk Anda, seperti membuka dan menutup aliran, tetapi tidak dimaksudkan untuk menangani file besar.
Menulis File yang lebih besar dengan Menggunakan Buffered Stream I / O (1.7)
The
java.nio.file
paket mendukung menyalurkan I / O, yang bergerak data dalam buffer, melewati beberapa lapisan yang dapat bottleneck streaming I / O.Pendekatan ini lebih disukai karena kinerjanya yang efisien terutama ketika menyelesaikan sejumlah besar operasi penulisan. Operasi yang disangga memiliki efek ini karena mereka tidak diharuskan memanggil metode penulisan sistem operasi untuk setiap byte tunggal, mengurangi operasi I / O yang mahal.
Menggunakan NIO API untuk menyalin (dan membuat yang baru) file dengan Outputstream (1.7)
Ada juga metode tambahan yang memungkinkan untuk menyalin semua byte dari aliran input ke file.
Penulis File (teks) (<1.7)
Menulis langsung ke file (kinerja kurang) dan harus digunakan hanya ketika jumlah penulisan kurang. Digunakan untuk menulis data yang berorientasi karakter ke file.
FileOutputStream (binary) (<1,7)
FileOutputStream dimaksudkan untuk menulis aliran byte mentah seperti data gambar.
Dengan pendekatan ini orang harus mempertimbangkan untuk selalu menulis array byte daripada menulis satu byte pada suatu waktu. Speedup bisa sangat signifikan - hingga 10 x lebih tinggi atau lebih. Oleh karena itu, disarankan untuk menggunakan
write(byte[])
metode ini kapan pun memungkinkan.sumber