Чому java.io.File не має методу close ()?


123

Хоча java.io.RandomAccessFileу close()методу java.io.Fileнемає. Чому так? Чи закривається файл автоматично після завершення чи щось?

Дякую!


3
Якщо ви заглянете в API Java, відповідь ви зможете отримати негайно.
gigadot

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

6
б / с його неможливо відкрити :)
bestsss

6
Тому що це нічого не відкриває. А люди значно менш надійні, ніж офіційна специфікація Java.
Маркіз Лорн

Відповіді:


141

Явадок Fileкласу описує клас як:

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

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

(Моя особиста думка полягає в тому, що дуже прикро, що потім Сонце продовжувало творити RandomAccessFile, викликаючи велику плутанину з непослідовними назвами.)


72

java.io.Fileне представляє відкритого файлу, він представляє шлях у файловій системі. Тому мати closeметод на цьому не має сенсу.

Власне, цей клас автори бібліотеки неправильно назвали, його слід назвати чимось на кшталт Path.


Але що ж робити з усіма методами переліку каталогів? Їх слід було б відокремити від Pathповністю.
biziclop

3
Погоджено, але у будь-якому випадку, або Файл, або RandomAccessFile неправильно названі. Щось на кшталт RandomAccessFileStream може бути кращим, але зараз це вже багато років.
maaartinus

7
"Власне, цей клас автори бібліотеки неправильно назвали, його слід назвати чимось на зразок Шлях" -> Вони вас почули. У пакеті 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();

Вам не потрібно закривати Files, тому що це просто представлення шляху.

Ви завжди повинні замислюватися про те, щоб закрити лише читача / письменників і фактично потоків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.