Хотя 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, потому что это просто представление пути.
Вы всегда должны думать о закрытии только читателей / писателей и фактически потоков.