Dlaczego java.io.File nie ma metody close ()?

123

Chociaż java.io.RandomAccessFilema close()metodę java.io.File, nie. Dlaczego? Czy plik jest zamykany automatycznie po sfinalizowaniu, czy coś?

Dzięki!

Albus dumbledore
źródło
3
Jeśli spojrzysz na Java API, będziesz w stanie natychmiast uzyskać odpowiedź.
gigadot
43
Dowiedziałem się, że ludzie są bardziej pomocni niż znakomita specyfikacja Java.
Albus Dumbledore,
6
b / c nie można go otworzyć :)
bestsss
6
Ponieważ niczego nie otwiera. A ludzie są znacznie mniej wiarygodni niż oficjalna specyfikacja Javy.
Markiz Lorne

Odpowiedzi:

141

Javadoc Fileklasy opisuje klasę jako:

Abstrakcyjna reprezentacja nazw ścieżek do plików i katalogów.

Filejest tylko reprezentacją nazwy ścieżki, z kilkoma metodami dotyczącymi systemu plików (jak exists()) i obsługi katalogów, ale rzeczywiste wejście i wyjście strumieniowe odbywa się gdzie indziej. Strumienie można otwierać i zamykać, pliki nie.

(Osobiście uważam, że to raczej niefortunne, że Sun następnie zaczął tworzyć RandomAccessFile, powodując wiele zamieszania z powodu niespójnego nazewnictwa).

biziclop
źródło
72

java.io.Filenie reprezentuje otwartego pliku, reprezentuje ścieżkę w systemie plików. Dlatego posiadanie closemetody nie ma sensu.

Właściwie ta klasa została źle nazwana przez autorów biblioteki, powinna nazywać się czymś w rodzaju Path.

axtavt
źródło
Ale co z wszystkimi metodami tworzenia list katalogów? Powinni byli zostać Pathcałkowicie odseparowani .
biziclop
3
Zgoda, ale w każdym przypadku nazwa File lub RandomAccessFile jest błędna. Coś w rodzaju RandomAccessFileStream mogłoby być lepsze, ale teraz jest już wiele lat za późno.
maaartinus
7
„Właściwie ta klasa została źle nazwana przez autorów biblioteki, powinna nazywać się czymś w rodzaju Path” -> Oni cię słyszeli. W pakiecie nio (New I / O) podobna klasa nosi teraz nazwę Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
min
6

Zasadniczo plik o dostępie swobodnym opakowuje strumienie wejściowe i wyjściowe w celu zarządzania dostępem swobodnym. Nie otwierasz i nie zamykasz pliku, otwierasz i zamykasz strumienie do pliku.

Plamka
źródło
1
Tak. Nigdy nie zaglądałem zbytnio do java.io.RandomAccessFile. Zawsze zakładałem, że zastępuje java.io.File, ale tak nie jest !. Plik reprezentuje ścieżkę. RandomAccessFile to obiekt, który może wykonywać operacje we / wy dysku tak jak strumienie, aczkolwiek z dużo inną implementacją, aby umożliwić dostęp losowy zamiast strumieniowego.
Steve Cohen,
6

BufferedReader można otwierać i zamykać, ale plik nigdy nie jest otwierany, po prostu reprezentuje ścieżkę w systemie plików.

Saher Ahwal
źródło
4

Załóżmy, że masz

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

Nie musisz zamykać Filelitery s, ponieważ jest to tylko reprezentacja ścieżki.

Zawsze powinieneś rozważyć zamknięcie tylko czytelników / autorów i faktycznie strumieni.

Balaji Boggaram Ramanarayan
źródło