Хоча java.io.RandomAccessFile
у close()
методу java.io.File
немає. Чому так? Чи закривається файл автоматично після завершення чи щось?
Дякую!
Хоча java.io.RandomAccessFile
у close()
методу java.io.File
немає. Чому так? Чи закривається файл автоматично після завершення чи щось?
Дякую!
Відповіді:
Явадок File
класу описує клас як:
Абстрактне подання імен файлів і каталогів.
File
є лише представленням імені шляху, з кількома методами, що стосуються файлової системи (наприклад exists()
) та обробки каталогу, але фактичні потокові введення та виведення здійснюються в іншому місці. Потоки можна відкривати та закривати, файли не можуть.
(Моя особиста думка полягає в тому, що дуже прикро, що потім Сонце продовжувало творити RandomAccessFile
, викликаючи велику плутанину з непослідовними назвами.)
java.io.File
не представляє відкритого файлу, він представляє шлях у файловій системі. Тому мати close
метод на цьому не має сенсу.
Власне, цей клас автори бібліотеки неправильно назвали, його слід назвати чимось на кшталт Path
.
Path
повністю.
Фактично файл з випадковим доступом обгортає вхідні та вихідні потоки для управління випадковим доступом. Ви не відкриваєте та не закриваєте файл, ви відкриваєте та закриваєте потоки до файлу.
BufferedReader можна відкривати та закривати, але файл ніколи не відкривається, він просто представляє шлях у файловій системі.
Скажіть, припустимо, у вас є
File f = new File("SomeFile");
f.length();
Вам не потрібно закривати File
s, тому що це просто представлення шляху.
Ви завжди повинні замислюватися про те, щоб закрити лише читача / письменників і фактично потоків.