Почему 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, вызвав много путаницы из-за непоследовательного наименования.)

biziclop
источник
72

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

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

axtavt
источник
Но как насчет всех методов листинга каталогов? Их надо было полностью отделить от всего 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, потому что это просто представление пути.

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

Баладжи Боггарам Раманараян
источник