Saya akan menyelesaikan jawaban yang sangat bagus @mmcrae
.
apakah ada alasan untuk menggunakan objek java.io.File lagi atau dapatkah kita menganggapnya usang?
Kelas JDK sangat jarang ditinggalkan.
Anda dapat melihat pada API JDK 8 yang sudah usang daftar semua kelas yang sudah tidak digunakan sejak JDK pertama.
Ini hanya berisi sedikit bagian dari kelas yang tidak dapat digunakan oleh dokumentasi Oracle dan komunitas Java.
java.util.Date
, java.util.Vector
, java.util.Hashtable
... yang kelas dengan begitu banyak cacat tidak usang.
Tapi kenapa ?
Karena secara konseptual sesuatu yang deprecated
berarti masih ada tetapi mencegah untuk digunakan karena hal itu pasti akan dihapus.
Ribuan program bergantung pada kelas yang dirancang buruk ini.
Untuk kelas seperti itu, pengembang Java API tidak akan memberikan sinyal seperti itu.
Jawabannya @EJP
sangat benar:
Tidak kecuali dan sampai ditandai di Javadoc.
Jadi, saya pikir pertanyaan Anda akan lebih masuk akal dalam istilah-istilahnya:
"Karena kita punya pilihan, haruskah kita menggunakan java.io.File
atau java.nio.file.Path
untuk perkembangan baru dan jika jawabannya adalah java.nio.file.Path
, bisakah Anda dengan mudah mengambil keuntungan dari java.io.File
proyek legacy yang digunakan java.io.File
?"
Saya percaya java.nio.file.Path dapat melakukan segalanya java.io.File dapat melakukan dan banyak lagi.
Anda punya jawabannya.
Tutorial oracle ini tentang warisan IO menegaskan pemikiran Anda.
Sebelum rilis Java SE 7, java.io.File
kelas adalah mekanisme yang digunakan untuk file I / O, tetapi memiliki beberapa kelemahan.
Banyak metode yang tidak melempar pengecualian ketika gagal, jadi tidak mungkin mendapatkan pesan kesalahan yang berguna. Misalnya, jika penghapusan file gagal, program akan menerima "hapus gagal" tetapi tidak akan tahu apakah itu karena file tidak ada, pengguna tidak memiliki izin, atau ada masalah lain.
Metode ganti nama tidak bekerja secara konsisten di seluruh platform. Tidak ada dukungan nyata untuk tautan simbolik.
Dibutuhkan lebih banyak dukungan untuk metadata, seperti izin file, pemilik file, dan atribut keamanan lainnya.
Mengakses file metadata tidak efisien.
Banyak metode File tidak skala. Meminta daftar direktori besar melalui server dapat mengakibatkan hang. Direktori besar juga dapat menyebabkan masalah sumber daya memori, yang mengakibatkan penolakan layanan.
Itu tidak mungkin untuk menulis kode yang dapat diandalkan yang secara rekursif bisa berjalan pohon file dan merespons dengan tepat jika ada tautan simbolik melingkar.
Dengan begitu banyak kekurangannya java.io.File
, kita benar-benar tidak perlu menggunakan kelas ini untuk perkembangan baru.
Dan bahkan untuk menggunakan kode lama java.io.File
, Oracle memberikan petunjuk untuk digunakan Path
.
Mungkin Anda memiliki kode lawas yang menggunakan java.io.File dan ingin memanfaatkan fungsi java.nio.file.Path dengan dampak minimal pada kode Anda.
Kelas java.io.File menyediakan metode toPath, yang mengubah contoh File gaya lama ke contoh java.nio.file.Path, sebagai berikut:
Path input = file.toPath();
Anda kemudian dapat mengambil keuntungan dari set fitur kaya yang tersedia untuk kelas Path.
Misalnya, anggap Anda memiliki beberapa kode yang menghapus file:
file.delete();
Anda bisa memodifikasi kode ini untuk menggunakan metode Files.delete, sebagai berikut:
Path fp = file.toPath();
Files.delete(fp);