В то время как 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
.
По сути, файл произвольного доступа обертывает входные и выходные потоки для управления произвольным доступом. Вы не открываете и не закрываете файл, вы открываете и закрываете потоки в файл.
BufferedReader можно открыть и закрыть, но файл никогда не открывается, он просто представляет путь в файловой системе.
Предположим, что у вас есть файл f = новый файл ( "SomeFile" ); f.length(); Вам не нужно закрывать файлы, потому что его jsut представляет путь. Вы должны всегда рассматривать закрытие только чтения/писателей и потоки информации.