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!


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).


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.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.