JDK7 memperkenalkan kelas operasi file baru java.nio.file.file, yang berisi banyak metode yang berguna untuk memanipulasi file, seperti memeriksa apakah file tersebut adalah file tersembunyi, atau memeriksa apakah file tersebut adalah file baca saja. Pengembang juga dapat menggunakan metode file.readallbytes (path) untuk membaca seluruh file ke dalam memori. Metode ini memastikan bahwa ketika semua konten byte dari file dibaca, atribut file ditutup, jika tidak, pengecualian IO atau pengecualian yang tidak dicentang lainnya akan terjadi. Ini berarti bahwa setelah membaca file ke konten blok terakhir, tidak perlu menutup file.
Perhatikan bahwa metode ini tidak cocok untuk membaca file besar karena mungkin ada ruang memori yang tidak mencukupi. Pengembang juga harus menentukan pengkodean karakter file untuk menghindari pengecualian atau kesalahan penguraian.
Jika Anda ingin membaca file sebagai string, Anda juga dapat menggunakan metode ReadAllLines (Path, Charset CS), yang mirip dengan metode sebelumnya, dan tidak perlu menutup file setelah membaca file. Tapi itu tidak mengembalikan array byte, tetapi serangkaian string. Selain itu, Java8 mengesampingkan metode ini, tanpa menentukan set karakter, langsung menggunakan pengkodean UTF-8 untuk konversi string.
Jika Anda ingin membaca file sebagai string baris demi baris, Anda dapat menggunakan metode file.lines (), yang mengembalikan aliran string dari file baca dan mengubah byte menjadi karakter menggunakan encoding UTF-8. Menggunakan metode foreach (), Anda hanya dapat menggunakan satu baris kode Java untuk mengeluarkan semua konten file ke konsol, seperti cuplikan kode ketiga di bawah ini.
Salinan kode adalah sebagai berikut:
impor java.io.ioException;
impor java.nio.charset.standardcharsets;
impor java.nio.file.files;
impor java.nio.file.paths;
impor java.util.list;
Public Class FileReadingTest {
public static void main (string [] args) melempar ioException {
// Java 7 contoh
// file.readallbytes membaca file dalam pengkodean UTF-8 secara default.
System.out.println (string baru (file.readallbytes (paths.get ("d: //jd.txt")))));
// 8 contoh java
Daftar <string> lines = file.readAllLines (paths.get ("d: //jd.txt"), standardcharsets.utf_8);
StringBuilder SB = StringBuilder baru ();
untuk (garis string: baris) {
SB.Append (baris);
}
String fromFile = sb.toString ();
System.out.println (Fromfile);
}
}
Jika Anda tidak menggunakan JDK7, tetapi JDK8, maka satu baris kode dapat menyelesaikan pembacaan file.
Salinan kode adalah sebagai berikut:
impor statis java.lang.system.out;
impor statis java.nio.file.files.readallbytes;
impor statis java.nio.file.paths.get;
impor java.io.ioException;
FileIntoString kelas publik {
public static void main (string [] args) melempar ioException {
// Satu baris kode dapat digunakan untuk membaca file, standarnya adalah encoding UTF-8
out.println (string baru (readAllbytes (get ("d: /jd.txt"))));
}
}
Jika Anda menggunakan JDK8, Anda juga dapat menggunakan streaming API untuk membaca dan menulis file, sehingga kode lebih ringkas dan efisien.
Dalam contoh berikut, metode Lines () mengembalikan aliran string, dan string menggunakan pengkodean UTF-8. sebagai berikut:
Salinan kode adalah sebagai berikut:
impor java.io.ioException;
impor java.nio.charset.standardcharsets;
impor java.nio.file.files;
impor java.nio.file.paths;
kelas publik java8filereader {
public static void main (string [] args) melempar ioException {
// java 8 menggunakan streaming untuk membaca file, yang lebih efisien
File.lines (paths.get ("d: //jd.txt"), standardcharsets.utf_8) .foreach (System.out :: println);
}
}
Beberapa poin yang perlu diperhatikan dalam contoh di atas:
1) File mungkin besar dan dapat melebihi ruang memori.
2) Untuk mengeluarkan log, catat mengapa file tidak dapat dibaca atau kesalahan apa pun yang ditemui saat membaca file.
3) Saat mengubah byte menjadi karakter, pengkodean karakter harus ditentukan.
4) Untuk menangani situasi di mana file tidak ada.
Perhatikan juga bahwa jika kode file baca adalah pengkodean ANSI, contoh di atas akan melaporkan java.nio.charset.malformedInputexception: input length = 1 kesalahan saat membaca konten file.