"Merhaba, Amigo. Uzun zaman oldu, görüşemedik."

"Merhaba Bilaabo. Ne hakkında konuşacaksın?"

"Bugün size dosyalarla çalışmaktan bahsedeceğim.  Java'nın bir sabit sürücüdeki dosyaları yönetmek için kullanabileceğiniz özel bir sınıfı (File) vardır. Dosya içeriklerini yönetmek için başka sınıflar da vardır: FileInputStream, FileOutputStream, vb. "

Dosya, Dosyalar, Yol - 1

"İlginç. Ama 'dosyaları yönet' derken ne demek istiyorsun?"

"Şimdi açıklayacağım şey bu. Dosyalar oluşturulabilir, silinebilir, yeniden adlandırılabilir ve çok daha fazlası. Bir dosyanın içeriğiyle çalışan (okuyan, yazan, değiştiren) hemen hemen her sınıfa bir File nesnesi iletebilirsiniz. . Örneğin:"

Dosya adını doğrudan FileInputStream'e iletebilirsiniz.
FileInputStream input = new FileInputStream("c:/path/a.txt");
Veya ayrı bir File nesnesi oluşturabilir ve ardından onu FileInputStrea'ya iletebilirsiniz.
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

"Ama ikinci seçenek daha uzun. Bu dosya nesnelerine neden ihtiyacımız olduğunu hala anlamıyorum."

"Bu özel örnek için haklısın. Bu, bunu nasıl yapman gerektiğine dair bir örnek değil, daha çok nasıl yapabileceğine dair bir örnek.
Ancak, belirli bir dizinde bulunan tüm dosyaların bir listesini görüntülemeniz gerektiğini düşünün. İşte bunun File nesneleri kullanılarak nasıl yapılabileceği:"

kod
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

" listFiles(), «c:/path/» ile belirtilen klasördeki dosyaların listesini döndüren bir yöntem midir?

"Evet. Ama programcılar genellikle 'dizin' derler. 'Klasör' terimi nispeten yakın zamanda kullanılmaya başlandı, ancak prensipte her iki terim de doğrudur ve hangisini tercih ederseniz edin diyebilirsiniz."

"Tamam. Peki getName () ne işe yarar? Dosyanın adını döndürür? Adın tam olarak içerdiği şey nedir? Yol dahil tam ad mı yoksa yalnızca dosyanın adı mı?"

"Yalnızca dosyanın adı. Tam yol için file.getAbsolutePath() vardır."

"Peki, File sınıfının başka hangi yöntemleri var?"

"Şuna bir bak:"

Yöntem Tanım
boolean isDirectory() File nesnesi bir dizin midir?
boolean isFile() Nesne bir dosya mı?
long length() Dosya boyutunu/uzunluğunu bayt cinsinden döndürür.
boolean createNewFile() Bu ada sahip bir dosya henüz yoksa yeni, boş bir dosya oluşturur.
boolean mkdir() Bir dizin oluşturur. «Mkdir» adı «make dizini»nden gelmektedir.
boolean mkdirs() Bir dizin ve tüm alt dizinlerini oluşturur.
boolean delete() Nesneyle ilişkili dosyayı siler. Nesne bir dizin ise, dizin yalnızca içinde dosya yoksa silinir.
void deleteOnExit() Dosyayı, programdan çıkıldığında otomatik olarak silinecek özel bir dosya listesine ekler.
File createTempFile(
String prefix,
String suffix,
File directory)
"dasd4d53sd" gibi rastgele oluşturulmuş benzersiz bir adla geçici bir dosya oluşturur.
Ek parametreler bir ad öneki ve sonektir. Bir dizin belirtilmezse, dosya geçici dosyalar için özel bir işletim sistemi dizininde oluşturulur.
boolean exists() Sabit sürücüde aynı ada sahip bir dosya varsa, true değerini döndürür.
String getAbsolutePath() Tüm alt dizinleriyle birlikte dosyanın tam yolunu döndürür.
String getCanonicalPath() Kurallı dosya yolunu döndürür.
Örneğin, «c:/dir/dir2/../a.txt» yolunu «c:/dir/a.txt» olarak dönüştürür
String[] list() Geçerli nesne tarafından temsil edilen dizinde bulunan dosya adlarının bir dizisini döndürür.
File[] listFiles() Geçerli File nesnesi tarafından temsil edilen dizinde bulunan bir dosya dizisini döndürür.
long getTotalSpace() Dosyanın bulunduğu diskteki toplam alan miktarını (bayt sayısı) döndürür.
long getFreeSpace() Dosyanın bulunduğu diskteki boş alan miktarını (bayt sayısı) döndürür.
boolean renameTo(File) Dosyayı yeniden adlandırır, yani dosyanın içeriği aslında yeni bir ad alır. Başka bir deyişle, «c:/dir/a.txt» dosyasını «d:/out/text/b.doc» olarak yeniden adlandırabilirsiniz.
String getName() Yol olmadan yalnızca dosya adını döndürür.
String getParent() Adın kendisi olmadan yalnızca geçerli dosyanın yolunu (dizini) döndürür.
Path toPath() Geçerli File nesnesine karşılık gelen bir Path nesnesi döndürür.

"Vay canına! Çok küçük bir liste değil, ha? Ve görünüşe göre onunla çok şey yapabilirsin: dosyalar oluştur ve sil, yeniden adlandır,..."

"Yani mevcut dosyanın dizinini almak için getParent()'i çağırmam gerekiyor?"

"Evet, ama bir String döndürür - dosya yolu - bir File nesnesi değil. Aslında, File sınıfı neredeyse tüm yöntemlerini kopyalar: bir sürüm bir String, diğeri - bir File nesnesi döndürür. Şuna bakın:"

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

Dosya yoluna sahip bir String'iniz varsa ve bir File nesnesine ihtiyacınız varsa, yapıcıyı kullanın. Durum tersine döndüyse (bir File nesneniz var ama bir String'e ihtiyacınız var), o zaman getAbsolutePath ()'i kullanın. Örneğin:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"Anladım."

"Harika. O halde size küçük bir görev: Geçerli dosyayla aynı dizinde bulunan tüm dosyaların adlarını gösterin."

"Hiçbir şey daha kolay olamaz. İşte bak:"

kod
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"Hmm. Doğru."

"Ama aynı sınıfın - File - hem dosya hem de dizin için kullanılması biraz kafa karıştırıcı. Bu bana pek mantıklı gelmiyor."

"Tarihsel nedenlerden dolayı böyle oldu. Eskiden bir dizin, diskteki özel bir 'boş' dosyaydı. Elbette şimdi çok şey değişti, ama her şey değil. Bugün sahip olduğum tek şey bu."

"İlginç ders için teşekkürler, Bilaabo."