Chociaż java.io.RandomAccessFile
ma close()
metodę java.io.File
, nie. Dlaczego? Czy plik jest zamykany automatycznie po sfinalizowaniu, czy coś?
Dzięki!
Chociaż java.io.RandomAccessFile
ma close()
metodę java.io.File
, nie. Dlaczego? Czy plik jest zamykany automatycznie po sfinalizowaniu, czy coś?
Dzięki!
Odpowiedzi:
Javadoc File
klasy opisuje klasę jako:
Abstrakcyjna reprezentacja nazw ścieżek do plików i katalogów.
File
jest 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).
java.io.File
nie reprezentuje otwartego pliku, reprezentuje ścieżkę w systemie plików. Dlatego posiadanie close
metody nie ma sensu.
Właściwie ta klasa została źle nazwana przez autorów biblioteki, powinna nazywać się czymś w rodzaju Path
.
Path
całkowicie odseparowani .
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.
BufferedReader można otwierać i zamykać, ale plik nigdy nie jest otwierany, po prostu reprezentuje ścieżkę w systemie plików.
Załóżmy, że masz
File f = new File("SomeFile");
f.length();
Nie musisz zamykać File
litery s, ponieważ jest to tylko reprezentacja ścieżki.
Zawsze powinieneś rozważyć zamknięcie tylko czytelników / autorów i faktycznie strumieni.