Java.io.File neden close () yöntemine sahip değil?


123

java.io.RandomAccessFileBir close()yöntemi varken yok java.io.File. Neden? Dosya, sonuçlandırıldığında otomatik olarak kapanıyor mu?

Teşekkürler!


3
Java API'sına bakarsanız, cevabı hemen alabileceksiniz.
gigadot

43
İnsanların, başka türlü mükemmel Java özelliklerinden daha yararlı olduğunu öğrendim.
Albus Dumbledore

6
b / c açılamıyor :)
bestsss

6
Çünkü hiçbir şey açmıyor. Ve insanlar resmi Java spesifikasyonundan çok daha az güvenilirdir.
Marquis of Lorne

Yanıtlar:


141

FileSınıfın javadoc'u sınıfı şu şekilde tanımlar:

Dosya ve dizin yol adlarının soyut bir temsili.

Filedosya sistemi (gibi exists()) ve dizin işlemeyle ilgili birkaç yöntemle birlikte bir yol adının yalnızca bir temsilidir, ancak gerçek akış girişi ve çıkışı başka bir yerde yapılır. Akışlar açılıp kapatılabilir, dosyalar açılamaz.

(Benim kişisel görüşüm, Sun'ın daha sonra yaratmaya devam RandomAccessFileetmesi ve tutarsız adlandırma ile çok fazla kafa karışıklığına neden olması oldukça talihsiz olduğudur.)


72

java.io.Fileaçık bir dosyayı temsil etmez , dosya sistemindeki bir yolu temsil eder. Bu nedenle üzerinde bir closeyönteme sahip olmak mantıklı değil.

Aslında bu sınıfa kütüphane yazarları tarafından yanlış isim verildi, buna benzer bir ad verilmeli Path.


Peki tüm dizin listeleme yöntemleri ne olacak? Tamamen ayrılmaları gerekirdi Path.
biziclop

3
Kabul edildi, ancak her durumda, File veya RandomAccessFile yanlış adlandırıldı. RandomAccessFileStream gibi bir şey daha iyi olabilirdi, ancak artık çok geç.
maaartinus

7
"Aslında, bu sınıfa kütüphane yazarları tarafından yanlış isim verildi, buna Yol gibi bir isim verilmeli" -> Sizi duydular. Nio (Yeni G / Ç) paketinde, benzer sınıfın adı artık Yol. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
dakika

6

Esasen rastgele erişim dosyası, rastgele erişimi yönetmek için girdi ve çıktı akışlarını sarar. Bir dosyayı açıp kapatmazsınız, bir dosyaya akışları açar ve kapatırsınız.


1
Evet. Java.io.RandomAccessFile'a hiç bakmadım. Ben her zaman java.io.File dosyasını geçersiz kıldığını varsaydım ama öyle değil !. Dosya bir yolu temsil eder. RandomAccessFile, akışlı erişim yerine rasgele erişime izin vermek için çok farklı bir uygulama ile de olsa, akışlar gibi disk G / Ç gerçekleştirebilen bir nesnedir.
Steve Cohen

6

Bir BufferedReader açılıp kapatılabilir ancak bir Dosya asla açılmaz, sadece dosya sistemindeki bir yolu temsil eder.


4

Varsayalım ki, sahipsin

File f  = new File("SomeFile");
f.length();

S'leri kapatmanıza gerek yoktur File, çünkü bu sadece bir yolun temsilidir.

Her zaman yalnızca okuyucuları / yazarları ve aslında akışları kapatmayı düşünmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.