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 все файлы делятся на 2 типа — текстовые и бинарные. Если содержимое можно представить как текст, понятный человеку — это текстовый файл. Во всех остальных случаях — это просто набор байт (бинарный файл).

Запись текста в файл — 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 buffer).

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. Исключения

Работа с файлами может завершиться ошибкой: файла нет, нет прав доступа, диск переполнен или файл занят другой программой. Поэтому нужно оборачивать работу с диском в try-catch, ну или пробрасывать исключения наружу с помощью throws.

try 
{
    String content = Files.readString(Path.of("hello.txt"));
    System.out.println(content);
} 
catch (IOException e) 
{
    System.out.println("Ошибка при чтении: " + e.getMessage());
}

Таким образом программа не «упадёт», а аккуратно сообщит пользователю, что произошло. Если требуется, можно пробросить исключение IOException дальше по стэку методом с ключевым словом throws.

1
Задача
JAVA 25 SELF, 12 уровень, 3 лекция
Недоступна
Запись строки в текстовый файл
Запись строки в текстовый файл
1
Задача
JAVA 25 SELF, 12 уровень, 3 лекция
Недоступна
Чтение текста из файла и вывод на экран
Чтение текста из файла и вывод на экран
1
Задача
JAVA 25 SELF, 12 уровень, 3 лекция
Недоступна
Запись и чтение бинарных данных
Запись и чтение бинарных данных
1
Задача
JAVA 25 SELF, 12 уровень, 3 лекция
Недоступна
Копирование файла
Копирование файла
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Grrbrr7 Уровень 20
12 ноября 2025
Files.writeString(file, "Сегодня отличный день!", StandardCharsets.UTF_8);
Ksanders Уровень 32
16 октября 2025
Java 25 вроде современный язык - но чтобы скопировать файл - нужно сперва считать все в массив байтов, а потом записать - выглядит не очень современно 🧐
Александр Уровень 50
16 октября 2025
скорее всего нам первые простейшие шажочки показали. потом будут вперед-назад, влево-вправо, приставными и скрещивающимися, широкими и мелкими, вприпрыжку и даже гусиным. для особых случаев: галоп, иноходь, рысь)))))))))
Xaxatumba Уровень 38
7 ноября 2025
В старом курсе эту информацию дают в самом конце. И работа с файлами, в старом курсе, на столько замудренно написана и с использованием старых классов, что читая эту лекцию кажется, что запись в файл и чтение из него, на столько просто и понятно.
Ksanders Уровень 32
16 октября 2025
В задаче 2 почему-то вместо содержимого файла почему-то выводится его наименование, это ошибка встроенного компилятора - или я делаю что-то не так?
nastya_zhadan Уровень 66
19 сентября 2025
О, полезная информация)
Big198801 Уровень 28
22 сентября 2025
да)