Chociaż java.io.RandomAccessFilema close()metodę java.io.File, nie. Dlaczego? Czy plik jest zamykany automatycznie po sfinalizowaniu, czy coś?
Dzięki!
Chociaż java.io.RandomAccessFilema close()metodę java.io.File, nie. Dlaczego? Czy plik jest zamykany automatycznie po sfinalizowaniu, czy coś?
Dzięki!
Odpowiedzi:
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).
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.
Pathcał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ć Filelitery s, ponieważ jest to tylko reprezentacja ścieżki.
Zawsze powinieneś rozważyć zamknięcie tylko czytelników / autorów i faktycznie strumieni.