JavaRush /Курси /JAVA 25 SELF /Знайомство з файлами та зображеннями

Знайомство з файлами та зображеннями

JAVA 25 SELF
Рівень 12 , Лекція 3
Відкрита

1. Вступ

У програмуванні майже завжди доводиться працювати з файлами. Приклади знайомі кожному: збереження текстової нотатки, прогресу в грі, копіювання зображення або читання налаштувань із конфігураційного файлу.

У Java для цього є сучасні й зручні інструменти: Path і Files із пакета java.nio.file. Вони дають змогу у кілька рядків коду відкрити файл, прочитати його вміст, записати текст або навіть скопіювати зображення.

Шлях до файлу (Path)

Файл завжди зберігається десь на диску, тож, щоб звернутися до нього, потрібно вказати шлях. Для цього в Java є клас Path, а створити новий обʼєкт можна за допомогою методу Path.of().

Path path = Path.of("hello.txt"); // відносний шлях
Path absPath = Path.of("C:/Users/Me/image.png"); // абсолютний шлях (Windows)

Пояснення:

  • Відносний шлях означає пошук файлу в поточній теці проєкту (наприклад, "hello.txt").
  • Абсолютний шлях указує повну адресу: диск, теки й назву файлу.

2. Робота з текстовими файлами

З погляду Java усі файли поділяються на два типи — текстові й бінарні. Якщо вміст можна подати як текст, зрозумілий людині, — це текстовий файл. В інших випадках — це просто набір байтів (бінарний файл).

Запис тексту у файл — writeString

Щоб записати рядок у файл, можна скористатися методом writeString.

Path p = Path.of("hello.txt");
Files.writeString(p, "Привіт, файл!");

Що тут відбулося:

  1. створюємо обʼєкт Path, який вказує на "hello.txt";
  2. за допомогою методу writeString записуємо до нього рядок;
  3. якщо файлу не було, його буде створено автоматично.

Таким чином можна легко зберігати нотатки або повідомлення у текстовий файл.

Читання тексту з файлу — readString

Метод readString дає змогу завантажити весь файл одразу в рядок.

Path p = Path.of("hello.txt");
String content = Files.readString(p);
System.out.println(content);

Тепер у змінній content зберігається вміст файлу. Це зручно для невеликих файлів: конфігураційних, текстових, JSON-документів.

3. Робота з бінарними файлами

Не всі файли складаються лише з тексту. Зображення, музика, архіви — це набори байтів. Для роботи з ними є методи write і readAllBytes.

Запис байтів у файл — write

Метод write() дає змогу записати у файл масив байтів (буфер).

byte[] data = {65, 66, 67, 68}; // символи A B C D
Files.write(Path.of("letters.bin"), data);

Тут ми записали у файл масив байтів. Якщо відкрити файл як текст, усередині будуть літери «ABCD».

Читання байтів — readAllBytes

Щоб знову отримати вміст файлу у вигляді масиву байтів, використовуємо метод readAllBytes.

byte[] buffer = Files.readAllBytes(Path.of("letters.bin"));

// Виводимо прочитаний масив байтів на екран
for (byte b : buffer) 
{
    System.out.print((char)b + " ");
}

На екрані зʼявиться:

A B C D

Цей підхід використовують для роботи з будь-якими бінарними файлами — зображеннями, документами, музикою.

4. Популярні сценарії роботи з файлами

Мабуть, найпоширеніший сценарій роботи з файлами — копіювання.

Копіювання файлів

Щоб скопіювати файл, можна просто прочитати його в масив байтів і записати в інший файл.

Path in = Path.of("logo.png");
Path out = Path.of("logo_copy.png");

byte[] bytes = Files.readAllBytes(in);
Files.write(out, bytes);

Таким чином можна копіювати зображення, документи й будь-які інші файли, не переймаючись їхнім форматом.

Перевірка існування та розміру

Іноді треба переконатися, що файл існує, й дізнатися його розмір. Для цього є методи exists і size.

Path p = Path.of("hello.txt");
if (Files.exists(p)) 
{
    long size = Files.size(p);
    System.out.println("Файл знайдено, розмір: " + size + " байтів");
} 
else 
{
    System.out.println("Файл не знайдено!");
}

Це корисно для діагностики: ви точно знатимете, чи працюєте з правильним файлом.

5. Винятки

Робота з файлами може завершитися помилкою: файл відсутній, бракує прав доступу, диск переповнений або файл зайнятий іншою програмою. Тому варто обгортати операції з диском у блок trycatch або передавати винятки далі за допомогою throws.

try 
{
    String content = Files.readString(Path.of("hello.txt"));
    System.out.println(content);
} 
catch (IOException e) 
{
    System.out.println("Помилка під час читання: " + e.getMessage());
}

Таким чином програма не «впаде», а акуратно повідомить користувачеві, що сталося. Якщо потрібно, виняток IOException можна передати далі стеком — із ключовим словом throws у сигнатурі методу.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ