III. Файлове введення-виведення
Оскільки файли в більшості сучасних операційних систем розуміються як послідовність байт, то для файлового введення-виведення створюються байтові потоки за допомогою класів FiІeІnputstream і FileOutputstream. Це особливо зручно для бінарних файлів, що зберігають байт-код, архіви, зображення, звук. Але дуже багато файлів містять тексти, складені із символів. Незважаючи на те, що символи можуть зберігатися в кодуванні Unicode, ці тексти частіше всього записані в байтових кодуваннях. Тому і для текстових файлів можна використовувати байтові потоки. В такому випадку з боку програми необхідно організовувати перетворення байтів у символи і навпаки.
Щоб полегшити це перетворення, в пакет java.io введені класи FiІeReader в FileWriter. Вони організовують перетворення потоку: із сторони програми потоки символьні, із сторони файлу — байтові. Це відбувається тому, що дані класи розширюють класи InputStreamReader і OutputstreamWriter, відповідно, містять «перехідне кільце» всередині себе. Незважаючи на відмінність потоків, використання класів файлового введення-виведення дуже схоже. В конструкторах всіх чотирьох файлових потоків задається ім’я файлу у вигляді рядка типу string або посилання на об’єкт класу File. Конструктори не тільки створюють об’єкт, але і відшуковують файл і відкривають його. Наприклад:
Fileinputstream fis = new FilelnputStreamC'PrWr.Java");
FileReader fr = new FileReader("D:\\jdkl.3\\src\\PrWr.Java");
При невдачі відбувається виключення класу FileNotFoundException, але конструктор класу FileWriter відмічає більш загальне виключення IOException. Після відкриття вихідного потоку типу FileWriter або FileQutputStream вміст файлу, якщо він не був порожнім, стирається. Для того щоб можна було робити запис в кінець файлу, і в тому і в іншому класі передбачений конструктор з двома аргументами. Якщо другий аргумент рівний true, то відбувається дозапис в кінець файлу, якщо false, то файл заповнюється новою інформацією. Наприклад:
FileWriter fw = new FileWriter("ch!8.txt", true);
FiieOutputstream fos = new FileOutputstream("D:\\samples\\newfile.txt");
Вміст файлу, відкритого для запису конструктором з одним аргументом, стирається. Відразу після виконання конструктора можна читати файл fis.read(), fr.read() або записувати в нього fos.write((char)с), fw.write((char)с).
По закінченню роботи з файлом потік належить закрити методом close(). Перетворення потоків у класах FileReader і FileWriter виконується по кодових таблицях, установлених на комп’ютері локалі. Для правильного введення кирилиці треба застосувати FileReader, a нe FileInputStream. Якщо файл містить текст в кодуванні, відмінний від локального кодування, то необхідно вставляти «перехідне кільце» вручну, як це робилось для консолі, наприклад:
InputStreamReader isr = new InputStreamReader(fis, "KOI8_R"));
Клас File містить близько сорока методів, що дозволяють взнати різні властивості файлу або каталогу. Перш за все, логічними методами isFile(), isDirectory() можна вияснити, чи являється шлях, вказаний в конструкторі, шляхом до файлу або каталогу. Для каталогу можна отримати його зміст — список імен файлів і підкаталогів — методом list(), повертаючим масив рядків string[]. Можна отримати такий же список у вигляді масиву об’єктів класу File[] методом listFiles(). Можна вибрати із списку тільки деякі файли, реалізувавши інтерфейс FileNameFiiter і звернувшись до методу list(FileNameFilter filter).
Якщо каталог з вказаним в конструкторі шляхом не існує, його можна створити логічним методом mkdir(). Цей метод повертає true, якщо каталог вдалось створити. Логічний метод mkdir() створює ще і всі неіснуючі каталоги, вказані в шляху. Порожній каталог видаляється методом delete(). Для файлу можна отримати його довжину в байтах методом length(), час останньої модифікації в секундах методом lastModified(). Якщо файл не існує, ці методи повертають нуль. Логічні методи canRead(), canWrite() показують права доступу до файлу. Файл можна перейменувати логічним методом renameTo(File newMame) або видалити логічним методом delete(). Ці методи повертають true, якщо операція пройшла успішно. Якщо файл з указаним в конструкторі шляхом не існує, його можна створити логічним методом createNewFile(), що повертає true, якщо файл не існував, і його вдалось створити, і false, якщо файл уже існував.
Статичними методами:
Дата добавления: 2014-12-10; просмотров: 1638;