Javaробота з файлами - запис, читання, видалення

Рекламний блок

Java має безліч інструментів для роботи з файлами, оскільки вони служать сховищем даних в багатьох програмах. Особливо часто доступ до файлів потрібно в Java Android. Всі класи для роботи з файлами розташовані в пакеті java.io, де також зберігаються класи для роботи з потоками вводу і виводу. Строго кажучи, в Java робота з файлами відбувається переважно через байтові та символьні потоки вводу-виводу. Винятком у даному випадку є клас File. З нього і почнемо.

Клас File Java - робота з файлами

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

Щоб створити екземпляр класу File, використовують один з його конструкторів: File(String шлях до папки, String ім'я файлу).

Розглянемо основні методи даного класу, що дозволяють отримувати відомості про файл або каталозі:

  • getName() - повертає ім'я файлу;
  • exists() - повертає логічне значення true, якщо файл існує, або false в протилежному випадку;
  • isFile() - визначає, вказує об'єкт на файл, повертаючи відповідне логічне значення;
  • isDirectory() - повертає true, якщо це папка;
  • canWrite() - повертає true, якщо файл доступний для запису;
  • canRead() - повертає true, якщо файл доступний для читання;
  • setReadOnly() - робить файл доступним тільки для читання;
  • length() - повертає розмір файлу у байтах;
  • renameTo(File нове ім'я) - перейменовує файл згідно з переданим аргументом. Повертає true, якщо операція успішна;
  • delete() - видаляє файл чи папку (якщо вона порожня), на який вказує викликає об'єкт;
  • list() - витягує список імен об'єктів, що зберігаються в даному каталозі, у вигляді масиву рядків (застосовується виключно до каталогів).
  • Таким чином, з допомогою класу File забезпечується в Java робота з файлами і папками.

    Робота з файлами за допомогою класів FileInputStream і FileOutputStream

    Раніше ми згадували, що в Java робота з файлами здійснюється переважно за допомогою потоків введення-виведення. Байтові потоки для роботи з файлами представлені у вигляді класів FileInputStream і FileOutputStream. Ці класи є спадкоємцями базових абстрактних класів InputStream і OutputStream відповідно, тому методи цих класів доступні для роботи з файлами.

    Розглянемо спочатку FileInputStream. Конструктори даного класу представлені на рисунку нижче:

    java работа с файлами

    Перший конструктор приймає в якості аргументу шлях до потрібного файлу у вигляді рядка, а другий - у вигляді об'єктного представлення. Хоча перший конструктор використовується частіше, у другому випадку є можливість вивчити властивості файлу доступними в класі File методами. При створенні екземпляра класу FileInputStream відкриває потік вводу для читання файла.

    Конструктори класу FileOutputStream показано нижче:

    java android

    Ситуація схожа на FileInputStream, але він також може приймати логічне значення "append", яке при true говорить про те, що дані, записувані в кінцевий файл будуть дописуватися до вже наявних, а при false - буде йти повна перезапис файлу, тобто старі дані не збережуться.

    Давайте розберемо приклад з використанням цих класів:

    java работа с файлами пример

    Потік вводу FileInputStream читає дані з файла file1.txt побайтово за допомогою методу read(). Кожен прочитаний байт зберігається в змінну в цілочисельному вигляді. Далі в тілі циклу while ця змінна передається як аргумент методу write примірника FileOutputStream, який записує прийнятий байт в файл file2.txt. Наприкінці обидва потоку в обов'язковому порядку закриваються за допомогою методу close.

    Класи FileReader і FileWriter

    Якщо вам завідомо відомо, що при роботі з файлами ви будете мати справу з текстом, то замість байтових потоків має сенс використовувати символьні. Дані потоки представлені класами FileReader і FileWriter в Java. Робота з файлами за допомогою цих класів відбувається приблизно так само, як і в попередньому випадку. Вони є нащадками класів Reader і Writer відповідно, в яких визначені основні методи для введення і виведення даних.

    Конструктори класів FileReader і FileWriter представлені на рисунку нижче:

    java работа с файлами и папками

    Погодьтеся, відмінностей у семантиці порівняно з байтовими потоками практично немає. Суть в тому, що дані класи призначені спеціально для роботи з символами в Юнікод, чого не можуть робити байтові потоки. Ось таким чином організована в Java робота з файлами. Приклад використання даних класів наведено нижче:

    java работа с файлами

    Як бачите, відмінностей не спостерігається. Варто зазначити, що хоча потоки символьні, метод read повертає, а метод write приймає ціле значення. Хоча сигнатура методу write передбачає прийом аргументи типу int, записується в потік тільки молодші 16 біт, оскільки символи в Java представляються саме такою кількістю біт.

    Висновок

    Отже, ми розібрали основні класи для роботи з файлами в Java. Варто відзначити, що якщо ви збираєтеся розробляти З під Java Android, можете сміливо використовувати даний інструментарій.

    Рекламний блок