Новини високих технологій
» » Java: робота з файлами - запис, читання, видалення

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

10-12-2016, 12:39
2 705
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. Конструктори даного класу представлені на рисунку нижче:
Перший конструктор приймає в якості аргументу шлях до потрібного файлу у вигляді рядка, а другий – у вигляді об'єктного представлення. Хоча перший конструктор використовується частіше, у другому випадку є можливість вивчити властивості файлу доступними в класі File методами. При створенні екземпляра класу FileInputStream відкриває потік вводу для читання файла.
Конструктори класу FileOutputStream показано нижче:
Ситуація схожа на FileInputStream, але він також може приймати логічне значення "append", яке при true говорить про те, що дані, записувані в кінцевий файл будуть дописуватися до вже наявних, а при false – буде йти повна перезапис файлу, тобто старі дані не збережуться. Давайте розберемо приклад з використанням цих класів:
Потік вводу FileInputStream читає дані з файла file1.txt побайтово за допомогою методу read(). Кожен прочитаний байт зберігається в змінну в цілочисельному вигляді. Далі в тілі циклу while ця змінна передається як аргумент методу write примірника FileOutputStream, який записує прийнятий байт в файл file2.txt. Наприкінці обидва потоку в обов'язковому порядку закриваються за допомогою методу close.

Класи FileReader і FileWriter

Якщо вам завідомо відомо, що при роботі з файлами ви будете мати справу з текстом, то замість байтових потоків має сенс використовувати символьні. Дані потоки представлені класами FileReader і FileWriter в Java. Робота з файлами за допомогою цих класів відбувається приблизно так само, як і в попередньому випадку. Вони є нащадками класів Reader і Writer відповідно, в яких визначені основні методи для введення і виведення даних. Конструктори класів FileReader і FileWriter представлені на рисунку нижче:
Погодьтеся, відмінностей у семантиці порівняно з байтовими потоками практично немає. Суть в тому, що дані класи призначені спеціально для роботи з символами в Юнікод, чого не можуть робити байтові потоки. Ось таким чином організована в Java робота з файлами. Приклад використання даних класів наведено нижче:
Як бачите, відмінностей не спостерігається. Варто зазначити, що хоча потоки символьні, метод read повертає, а метод write приймає ціле значення. Хоча сигнатура методу write передбачає прийом аргументи типу int, записується в потік тільки молодші 16 біт, оскільки символи в Java представляються саме такою кількістю біт.

Висновок

Отже, ми розібрали основні класи для роботи з файлами в Java. Варто відзначити, що якщо ви збираєтеся розробляти З під Java Android, можете сміливо використовувати даний інструментарій.
Цікаво по темі
Як зробити прозорою картинку в "Фотошопі"?
Як зробити прозорою картинку в "Фотошопі"?
Як зробити прозорою картинку в графічному редакторі Adobe Photoshop? Та немає нічого простіше! Досить елементарних знань основ роботи з програмою.
Java Array. Масиви в Java. Java для початківців
Java Array. Масиви в Java. Java для початківців
Для роботи з великою кількістю значень в Java, як у більшості сучасних високорівневих мов програмування, є такий потужний інструмент, як масиви.
BigInteger Java: робота з великими числами
BigInteger Java: робота з великими числами
Для роботи з числами, які не можуть зберігається в стандартних примітивних типів, в Java є спеціальний клас BigInteger. Він не тільки інкапсулює їх
Нескінченний for (Java) цикл
Нескінченний for (Java) цикл
Одними з ключових елементів ядра мови Java є цикли, що дозволяють виконувати повторювані операції певну кількість разів. Даний інструмент значно
Java Узагальнення: опис і методи
Java Узагальнення: опис і методи
Узагальнені типи або узагальнення в Java представляють собою потужний інструмент уніфікації коду та забезпечення безпеки типів даних. У даній статті
Java: InputStream. Потоки введення
Java: InputStream. Потоки введення
У даній статті ми розглянемо базовий клас для потоків вводу даних в Java - InputStream. Розберемо основну його функціональність і реалізації, які