Çok iyi bir cevap vereceğim @mmcrae
.
java.io.File nesnesini kullanmak için herhangi bir neden var mı yoksa kullanılmadığını düşünebilir miyiz?
JDK sınıfları nadiren kullanımdan kaldırılıyor.
Sen görebilirsiniz JDK 8 API artık kullanılmayacağı listelemek ilk JDK beri kaldırılmış tüm sınıfları.
Oracle belgelerinin ve Java topluluğunun kullanmaktan vazgeçtiği sınıfların sadece küçük bir bölümünü içerir.
java.util.Date
, java.util.Vector
, java.util.Hashtable
... Birçok kusurları kaldırılmış değildir bu yüzden birlikte sınıfları olduğunu.
Ama neden ?
Çünkü kavramsal olarak deprecated
hala orada bir şey var ama kesinlikle kaldırılacağı için kullanmaktan vazgeçiyor.
Binlerce program bu kötü tasarlanmış derslere güveniyor.
Bu tür sınıflar için Java API geliştiricileri böyle bir sinyal vermeyecektir.
Cevabı @EJP
gerçekten doğru:
Javadoc'ta bu kadar işaretlenmedikçe ve bitene kadar değil.
Yani, soru onun açısından daha mantıklı olacağını düşünüyorum:
"Biz seçim var, biz kullanmalısınız java.io.File
veya java.nio.file.Path
yeni gelişmeler için cevap ise java.nio.file.Path
kolaylıkla yararlanabilir, java.io.File
eski projeleri kullanmak için java.io.File
?"
Bir java.nio.file.Path dosyasının bir java.io.File'ın yapabileceği her şeyi yapabileceğine ve daha fazlasına inanıyorum.
Cevabınız var.
Eski ES ile ilgili bu kehanet öğretmeni düşüncelerinizi doğrular.
Java SE 7 sürümünden önce, java.io.File
sınıf dosya G / Ç için kullanılan mekanizmadır, ancak birkaç dezavantajı vardı.
Birçok yöntem başarısız olduklarında istisna atmadı, bu nedenle yararlı bir hata mesajı almak imkansızdı. Örneğin, bir dosya silme başarısız olursa, program "silme hatası" alır, ancak dosyanın bulunmadığından, kullanıcının izinleri olmadığından veya başka bir sorundan kaynaklanıp kaynaklanmadığını bilmez.
Yeniden adlandırma yöntemi platformlar arasında tutarlı bir şekilde çalışmadı. Sembolik bağlantılar için gerçek bir destek yoktu.
Dosya verileri, dosya sahibi ve diğer güvenlik öznitelikleri gibi meta veriler için daha fazla destek istendi.
Dosya meta verilerine erişim yetersizdi.
Dosya yöntemlerinin çoğu ölçeklendirilmedi. Bir sunucu üzerinden büyük bir dizin listesinin istenmesi askıda kalmaya neden olabilir. Büyük dizinler de bellek kaynağı sorunlarına neden olarak hizmet reddine neden olabilir.
Dairesel sembolik bağlantılar varsa, bir dosya ağacında özyinelemeli olarak yürüyebilen ve uygun şekilde yanıt verebilecek güvenilir bir kod yazmak mümkün değildi.
Pek çok dezavantajı ile java.io.File
, bu sınıfı yeni gelişmeler için kullanmak için gerçekten hiçbir nedene ihtiyacımız yok.
Ve eski kod java.io.File
kullanımı için bile , Oracle kullanmak için ipuçları verir Path
.
Belki de java.io.File kullanan ve kodunuz üzerinde minimum etkiye sahip java.nio.file.Path işlevinden yararlanmak isteyen eski bir kodunuz vardır.
Java.io.File sınıfı, eski stil File örneğini java.nio.file.Path örneğine aşağıdaki gibi dönüştüren toPath yöntemini sağlar:
Path input = file.toPath();
Daha sonra Path sınıfının kullanabileceği zengin özellik kümesinden yararlanabilirsiniz.
Örneğin, bir dosyayı silmiş bazı kodlarınız olduğunu varsayalım:
file.delete();
Aşağıdaki gibi Files.delete yöntemini kullanmak için bu kodu değiştirebilirsiniz:
Path fp = file.toPath();
Files.delete(fp);