1. Fileskelas

Kelas fail

Untuk bekerja dengan fail, terdapat kelas utiliti yang licin — java.nio.file.Files. Ia mempunyai kaedah untuk setiap kesempatan. Semua kaedah kelas ini adalah statik dan beroperasi pada objek Path. Terdapat banyak kaedah, jadi kami akan mempertimbangkan hanya yang paling penting:

Kaedah Penerangan
Path createFile(Path path)
Mencipta fail baharu yang laluannyapath
Path createDirectory(Path path)
Mencipta direktori baharu
Path createDirectories(Path path)
Mencipta berbilang direktori
Path createTempFile(prefix, suffix)
Mencipta fail sementara
Path createTempDirectory(prefix)
Mencipta direktori sementara
void delete(Path path)
Memadam fail atau direktori jika ia kosong
Path copy(Path src, Path dest)
Menyalin fail
Path move(Path src, Path dest)
Memindahkan fail
boolean isDirectory(Path path)
Menyemak sama ada laluan itu ialah direktori dan bukan fail
boolean isRegularFile(Path path)
Menyemak sama ada laluan itu ialah fail dan bukan direktori
boolean exists(Path path)
Menyemak sama ada objek wujud pada laluan yang diberikan
long size(Path path)
Mengembalikan saiz fail
byte[] readAllBytes(Path path)
Mengembalikan keseluruhan kandungan fail sebagai tatasusunan bait
String readString(Path path)
Mengembalikan keseluruhan kandungan fail sebagai rentetan
List<String> readAllLines(Path path)
Mengembalikan keseluruhan kandungan fail sebagai senarai rentetan
Path write(Path path, byte[])
Menulis tatasusunan bait pada fail
Path writeString(Path path, String str)
Menulis rentetan pada fail
DirectoryStream<Path> newDirectoryStream(Path dir)
Mengembalikan koleksi fail (dan subdirektori) daripada direktori yang diberikan

2. Mencipta fail dan direktori

Fail dan direktori sangat mudah dibuat. Mari yakinkan diri kita dengan beberapa contoh:

Kod Catatan
Files.createFile(Path.of("c:\\readme.txt"));
Mencipta fail
Files.createDirectory(Path.of("c:\\test"));
Mencipta direktori
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Mencipta direktori dan semua subdirektori yang diperlukan jika ia tidak wujud.

3. Menyalin, memindahkan dan memadam

Menyalin, mengalih dan memadam fail adalah sama mudah. Ini juga terpakai kepada direktori, tetapi ia mesti kosong.

Kod Catatan
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Menyalin fail
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Memindahkan dan menamakan semula fail
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Memadamkan fail

4. Menyemak jenis dan kewujudan fail

Apabila anda mempunyai laluan yang disediakan oleh orang lain, anda ingin tahu sama ada ia adalah fail atau direktori. Dan secara umum, adakah fail/direktori tersebut wujud atau tidak?

Terdapat kaedah khas untuk ini juga. Anda juga boleh mengetahui panjang fail dengan mudah:

Kod Catatan
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. Bekerja dengan kandungan fail

Akhir sekali, terdapat satu siri kaedah yang memudahkan untuk membaca atau menulis kandungan fail. Contoh:

Kod Penerangan
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

Baca kandungan fail sebagai senarai rentetan.

Paparkan rentetan


6. Mendapatkan kandungan direktori

Kaedah yang paling menarik masih kekal. Ia digunakan untuk mendapatkan fail dan subdirektori dalam direktori tertentu.

Kami bercakap tentang newDirectoryStream()kaedah, yang mengembalikan objek khas DirectoryStream<Path>. Ia mempunyai iterator(!) yang boleh anda gunakan untuk mendapatkan semua fail dan subdirektori bagi direktori tertentu.

Ini lebih mudah daripada kedengaran.

Kod Penerangan
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


Dapatkan objek dengan senarai fail
Gelung pada senarai fail

Objek DirectoryStream<Path>mempunyai dua sifat. Pertama, ia mempunyai iterator yang mengembalikan laluan fail, dan kita boleh menggunakan objek ini di dalam for-eachgelung.

Dan kedua, objek ini ialah aliran data, jadi ia mesti ditutup secara eksplisit menggunakan close()kaedah, atau diisytiharkan penggunaan di dalam try-with-resourcesblok.



7. Files.newInputStreamkaedah

Bermula dengan Java 5, kelas FileInputStreamdan FileOutputStreamtelah ditamatkan. Salah satu kelemahan mereka ialah apabila objek kelas ini dicipta, fail akan segera dibuat pada cakera. Dan semua pengecualian yang berkaitan dengan penciptaan fail berpotensi dibuang.

Kemudian ini diiktiraf sebagai bukan keputusan terbaik. Oleh itu, adalah disyorkan untuk menggunakan kaedah java.nio.Fileskelas utiliti untuk mencipta objek fail.

Berikut ialah perbandingan antara pendekatan lama dan pendekatan baharu untuk mencipta fail:

Sebelum ini
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Selepas
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

Dan terdapat pengganti yang serupa untuk FileOutputStream:

Sebelum ini
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Selepas
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );