1. Клас Files

Щоб працювати з файлами, є шикарний утилітний клас — java.nio.file.Files. У нього є методи просто на всі випадки життя. Всі методи цього класу статичні і працюють з об'єктами типу Path. Методів дуже багато, тому ми розглянемо тільки основні:
| Метод | Опис |
|---|---|
|
Створює новий файл за шляхом path |
|
Створює нову директорію |
|
Створює кілька директорій |
|
Створює тимчасовий файл |
|
Створює тимчасову директорію |
|
Видаляє файл або директорію, якщо вона порожня |
|
Копіює файл |
|
Переміщує файл |
|
Перевіряє, що шлях — це директорія, а не файл |
|
Перевіряє, що шлях — це файл, а не директорія |
|
Перевіряє, що об'єкт за заданим шляхом існує |
|
Повертає розмір файлу |
|
Повертає весь вміст файлу у вигляді масиву байт |
|
Повертає весь вміст файлу у вигляді рядка |
|
Повертає весь вміст файлу у вигляді списку рядків |
|
Записує у файл масив байт |
|
Записує у файл рядок |
|
Повертає колекцію файлів (та піддиректорій) із заданої директорії |
2. Створення файлів та директорій
Файли та директорії створювати дуже просто. Переконаємося на прикладах:
| Код | Примітка |
|---|---|
|
Створює файл |
|
Створює директорію |
|
Створює директорію і всі потрібні піддиректорії, якщо їх не існує. |
3. Копіювання, переміщення та видалення
Копіювати, переміщати та видаляти файли так само легко. На директорії це теж розповсюджується, але вони повинні бути порожні.
| Код | Примітка |
|---|---|
|
Копіює файл |
|
Переміщує та перейменовує файл |
|
Видаляє файл |
4. Перевірка типу файлу та факту існування
Коли у тебе є якийсь шлях, отриманий ззовні, ти, ймовірно, захочеш знати, це файл чи директорія. Ну і загалом: існує такий файл/директорія чи ні?
Для цього теж є спеціальні методи. Також можна легко дізнатися довжину файлу:
| Код | Примітка |
|---|---|
|
|
|
|
|
|
|
|
5. Робота з вмістом файлу
І нарешті, є ціла серія методів, які дозволяють легко прочитати або записати вміст файлу. Приклад:
| Код | Опис |
|---|---|
|
Читаємо вміст файлу у вигляді списку рядків. Виводимо рядки на екран |
6. Отримання вмісту директорії
Залишився ще найцікавіший метод — отримання файлів і піддиректорій у заданій директорії.
Для цього є спеціальний метод — newDirectoryStream(), який повертає спеціальний об'єкт типу DirectoryStream<Path>. У нього є ітератор(!), і за допомогою цього ітератора можна отримати всі файли та піддиректорії заданої директорії.
Виглядає простіше, ніж здається:
| Код | Опис |
|---|---|
|
Отримуємо об'єкт зі списком файлів Цикл за списком файлів |
Об'єкт DirectoryStream<Path> має дві властивості. По-перше, у нього є ітератор, який повертає шляхи до файлів, і ми можемо цей об'єкт використовувати всередині циклу for-each.
А по-друге, цей об'єкт є потоком даних, і його потрібно закривати за допомогою методу close(), ну або використовувати всередині try-with-resources.
7. Метод Files.newInputStream
Починаючи з Java 5 класи FileInputStream і FileOutputStream стали вважатися застарілими. Одним із їх мінусів було те, що при створенні об'єкта цих класів одразу відбувається створення файлів на диску. І потенційно викидаються всі помилки, пов'язані зі створенням файлів.
Згодом це було визнано не найкращим рішенням. Тому для створення об'єктів-файлів рекомендується використовувати методи утилітного класу – java.nio.Files.
Ось порівняння старого підходу до створення файлів і нового:
| Було |
|---|
|
| Стало |
|
Аналогічно заміна і для FileOutputStream:
| Було |
|---|
|
| Стало |
|
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ