Почему java.io.File не имеет метода close ()? - PullRequest
107 голосов
/ 20 января 2011

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

Спасибо!

Ответы [ 5 ]

129 голосов
/ 20 января 2011

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

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

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

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

63 голосов
/ 20 января 2011

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

На самом деле, этот класс был ошибочно назван авторами библиотеки, он должен называться примерно как Path.

6 голосов
/ 20 января 2011

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

4 голосов
/ 20 января 2011

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

3 голосов
/ 20 мая 2013

Допустим, у вас есть

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...