Хотя java.io.RandomAccessFile
есть close()
метод java.io.File
, нет. Это почему? Файл закрывается автоматически при финализации или что-то в этом роде?
Спасибо!
Хотя java.io.RandomAccessFile
есть close()
метод java.io.File
, нет. Это почему? Файл закрывается автоматически при финализации или что-то в этом роде?
Спасибо!
Ответы:
Javadoc File
класса описывает класс как:
Абстрактное представление путей к файлам и каталогам.
File
представляет собой только представление имени пути с несколькими методами, касающимися файловой системы (например, exists()
) и обработки каталогов, но фактический потоковый ввод и вывод выполняется в другом месте. Потоки можно открывать и закрывать, файлы - нет.
(Мое личное мнение состоит в том, что весьма прискорбно, что Sun тогда продолжила творить RandomAccessFile
, вызвав много путаницы из-за непоследовательного наименования.)
java.io.File
не представляет собой открытый файл, он представляет собой путь в файловой системе. Поэтому использовать close
метод не имеет смысла.
Собственно, этот класс был неправильно назван авторами библиотеки, называть его надо как-то так Path
.
Path
.
По сути, файл с произвольным доступом обертывает потоки ввода и вывода для управления произвольным доступом. Вы не открываете и не закрываете файл, вы открываете и закрываете потоки файла.
BufferedReader можно открывать и закрывать, но файл никогда не открывается, он просто представляет собой путь в файловой системе.
Скажем, предположим, у вас есть
File f = new File("SomeFile");
f.length();
Вам не нужно закрывать File
s, потому что это просто представление пути.
Вы всегда должны думать о закрытии только читателей / писателей и фактически потоков.