Хоча 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();
Вам не потрібно закривати Files, тому що це просто представлення шляху.
Ви завжди повинні замислюватися про те, щоб закрити лише читача / письменників і фактично потоків.