1. Fileskelas

Kelas file

Untuk bekerja dengan file, ada kelas utilitas yang apik — java.nio.file.Files. Ini memiliki metode untuk setiap kesempatan. Semua metode kelas ini statis dan beroperasi pada objek Path. Ada banyak metode, jadi kami hanya akan mempertimbangkan yang paling penting:

metode Keterangan
Path createFile(Path path)
Membuat file baru yang jalurnya adalahpath
Path createDirectory(Path path)
Membuat direktori baru
Path createDirectories(Path path)
Membuat banyak direktori
Path createTempFile(prefix, suffix)
Membuat file sementara
Path createTempDirectory(prefix)
Membuat direktori sementara
void delete(Path path)
Menghapus file atau direktori jika kosong
Path copy(Path src, Path dest)
Menyalin file
Path move(Path src, Path dest)
Memindahkan file
boolean isDirectory(Path path)
Memeriksa apakah path adalah direktori dan bukan file
boolean isRegularFile(Path path)
Memeriksa apakah path adalah file dan bukan direktori
boolean exists(Path path)
Memeriksa apakah suatu objek ada di jalur yang diberikan
long size(Path path)
Mengembalikan ukuran file
byte[] readAllBytes(Path path)
Mengembalikan seluruh konten file sebagai larik byte
String readString(Path path)
Mengembalikan seluruh konten file sebagai string
List<String> readAllLines(Path path)
Mengembalikan seluruh konten file sebagai daftar string
Path write(Path path, byte[])
Menulis array byte ke file
Path writeString(Path path, String str)
Menulis string ke file
DirectoryStream<Path> newDirectoryStream(Path dir)
Mengembalikan koleksi file (dan subdirektori) dari direktori yang diberikan

2. Membuat file dan direktori

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

Kode Catatan
Files.createFile(Path.of("c:\\readme.txt"));
Membuat file
Files.createDirectory(Path.of("c:\\test"));
Membuat direktori
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Membuat direktori dan semua subdirektori yang diperlukan jika tidak ada.

3. Menyalin, memindahkan, dan menghapus

Menyalin, memindahkan, dan menghapus file sama mudahnya. Ini juga berlaku untuk direktori, tetapi harus kosong.

Kode Catatan
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Menyalin file
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Memindahkan dan mengganti nama file
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Menghapus file

4. Memeriksa jenis dan keberadaan file

Saat Anda memiliki jalur yang disediakan oleh orang lain, Anda ingin tahu apakah itu file atau direktori. Dan secara umum, apakah file/direktori seperti itu ada atau tidak?

Ada metode khusus untuk ini juga. Anda juga dapat dengan mudah mengetahui panjang file:

Kode 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 isi file

Terakhir, ada serangkaian metode yang memudahkan untuk membaca atau menulis konten file. Contoh:

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

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

Baca isi file sebagai daftar string.

Menampilkan string


6. Mendapatkan isi direktori

Metode yang paling menarik masih ada. Ini digunakan untuk mendapatkan file dan subdirektori dalam direktori tertentu.

Kita berbicara tentang newDirectoryStream()metode yang mengembalikan DirectoryStream<Path>objek khusus. Ia memiliki iterator(!) yang dapat Anda gunakan untuk mendapatkan semua file dan subdirektori dari direktori tertentu.

Ini lebih mudah daripada kedengarannya.

Kode Keterangan
Path path = Path.of("c:\\windows");

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


Dapatkan objek dengan daftar file
Ulangi daftar file

Objek DirectoryStream<Path>memiliki dua properti. Pertama, ia memiliki iterator yang mengembalikan path file, dan kita bisa menggunakan objek ini di dalam sebuah for-eachloop.

Dan kedua, objek ini adalah aliran data, jadi harus ditutup secara eksplisit menggunakan close()metode, atau dideklarasikan menggunakan di dalam try-with-resourcesblok.



7. Files.newInputStreammetode

Dimulai dengan Java 5, kelas FileInputStreamdan FileOutputStreamsudah tidak digunakan lagi. Salah satu kelemahannya adalah ketika objek dari kelas ini dibuat, file segera dibuat di disk. Dan semua pengecualian yang terkait dengan pembuatan file berpotensi dibuang.

Belakangan ini diakui sebagai bukan keputusan terbaik. Oleh karena itu, disarankan untuk menggunakan metode kelas utilitas java.nio.Filesuntuk membuat objek file.

Berikut perbandingan antara pendekatan lama dan pendekatan baru untuk membuat file:

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

Dan ada pengganti yang serupa untuk FileOutputStream:

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