Почему java.io.File не имеет метода close ()?


123

Хотя java.io.RandomAccessFileесть close()метод java.io.File, нет. Это почему? Файл закрывается автоматически при финализации или что-то в этом роде?

Спасибо!


3
Если вы заглянете в Java API, то сразу получите ответ.
gigadot

43
Я узнал, что люди более полезны, чем в остальном превосходная спецификация Java.
Альбус Дамблдор

6
б / ц не открывается :)
bestsss

6
Потому что ничего не открывает. И люди значительно менее надежны, чем официальная спецификация Java.
Marquis of Lorne

Ответы:


141

Javadoc Fileкласса описывает класс как:

Абстрактное представление путей к файлам и каталогам.

Fileпредставляет собой только представление имени пути с несколькими методами, касающимися файловой системы (например, exists()) и обработки каталогов, но фактический потоковый ввод и вывод выполняется в другом месте. Потоки можно открывать и закрывать, файлы - нет.

(Мое личное мнение состоит в том, что весьма прискорбно, что Sun тогда продолжила творить RandomAccessFile, вызвав много путаницы из-за непоследовательного наименования.)


72

java.io.Fileне представляет собой открытый файл, он представляет собой путь в файловой системе. Поэтому использовать closeметод не имеет смысла.

Собственно, этот класс был неправильно назван авторами библиотеки, называть его надо как-то так Path.


Но как насчет всех методов листинга каталогов? Их надо было полностью отделить от всего Path.
biziclop

3
Согласен, но в любом случае либо File, либо RandomAccessFile названы неправильно. Что-то вроде RandomAccessFileStream могло бы быть лучше, но уже слишком поздно.
maaartinus

7
«На самом деле, этот класс был неправильно назван авторами библиотеки, он должен называться как-то вроде Path» -> Они вас услышали. В пакете nio (New I / O) аналогичный класс теперь называется Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
минут

6

По сути, файл с произвольным доступом обертывает потоки ввода и вывода для управления произвольным доступом. Вы не открываете и не закрываете файл, вы открываете и закрываете потоки файла.


1
Да. Я никогда особо не заглядывал в java.io.RandomAccessFile. Я всегда предполагал, что он переопределяет java.io.File, но это не так! Файл представляет собой путь. RandomAccessFile - это объект, который может выполнять дисковый ввод-вывод, как потоки, хотя и с другой реализацией, чтобы разрешить случайный, а не потоковый доступ.
Стив Коэн,

6

BufferedReader можно открывать и закрывать, но файл никогда не открывается, он просто представляет собой путь в файловой системе.


4

Скажем, предположим, у вас есть

File f  = new File("SomeFile");
f.length();

Вам не нужно закрывать File s, потому что это просто представление пути.

Вы всегда должны думать о закрытии только читателей / писателей и фактически потоков.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.