Files
Files — статический утилитный класс из пакета java.nio.file, который пришёл на смену устаревшим java.io.File-операциям. Все методы — статические и принимают объекты Path, описывающие путь в файловой системе.
В Files собраны почти все операции, которые нужны при работе с файлами и каталогами: чтение, запись, копирование, перемещение, удаление, обход дерева, получение атрибутов, потоковый доступ к строкам.
Зачем нужен
Однострочные операции над файлами: прочитать как строку, записать список строк, скопировать.
Удобный обход каталогов без ручного рекурсивного кода.
Современный API, работающий с большими файлами, ссылками, атрибутами и кодировками.
Получение Path
Path.of("data", "log.txt").Path.of("/tmp/log.txt").Paths.get(...)— устаревший псевдоним.
Популярные методы
exists(Path)/notExists(Path)/isDirectory(Path)/isRegularFile(Path).createFile(Path)/createDirectory(Path)/createDirectories(Path).readString(Path)/writeString(Path, CharSequence, OpenOption...)— текст целиком.readAllLines(Path)/write(Path, Iterable<? extends CharSequence>)— список строк.readAllBytes(Path)/write(Path, byte[])— бинарные данные.copy(Path src, Path dst, CopyOption...),move(Path src, Path dst, CopyOption...).delete(Path)/deleteIfExists(Path).size(Path),getLastModifiedTime(Path).list(Path),walk(Path)— потоки путей в каталоге и в дереве.lines(Path)— поток строк (ленивое чтение).
Пример 1. Запись и чтение текста
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class TextIO {
public static void main(String[] args) throws IOException {
Path p = Path.of("note.txt");
Files.writeString(p, "AlashEd Wiki\nJava notes");
String content = Files.readString(p);
System.out.println(content);
Files.delete(p);
}
}
Вывод:
AlashEd Wiki
Java notes
Пример 2. Чтение по строкам
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
public class ReadLines {
public static void main(String[] args) throws IOException {
Path p = Path.of("kits.txt");
Files.write(p, List.of("Arduino", "ESP32", "Robot Phobo"));
List<String> lines = Files.readAllLines(p);
for (int i = 0; i < lines.size(); i++) {
System.out.println((i + 1) + ". " + lines.get(i));
}
Files.delete(p);
}
}
Вывод:
1. Arduino
2. ESP32
3. Robot Phobo
Пример 3. Дозапись в файл
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public class AppendDemo {
public static void main(String[] args) throws IOException {
Path log = Path.of("events.log");
Files.writeString(log, "boot\n");
Files.writeString(log, "sensor_ok\n", StandardOpenOption.APPEND);
Files.writeString(log, "ready\n", StandardOpenOption.APPEND);
System.out.println(Files.readString(log));
Files.delete(log);
}
}
Вывод:
boot
sensor_ok
ready
Пример 4. Создание каталогов
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class MkDirs {
public static void main(String[] args) throws IOException {
Path dir = Path.of("tmp_demo", "logs", "2026");
Files.createDirectories(dir);
System.out.println("Существует: " + Files.isDirectory(dir));
Files.delete(dir);
Files.delete(dir.getParent());
Files.delete(dir.getParent().getParent());
}
}
Вывод:
Существует: true
Пример 5. Копирование и перемещение
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class CopyMove {
public static void main(String[] args) throws IOException {
Path src = Path.of("a.txt");
Path dst = Path.of("b.txt");
Path moved = Path.of("c.txt");
Files.writeString(src, "hello");
Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
Files.move(dst, moved, StandardCopyOption.REPLACE_EXISTING);
System.out.println("a: " + Files.exists(src));
System.out.println("b: " + Files.exists(dst));
System.out.println("c: " + Files.exists(moved) + " content=" + Files.readString(moved));
Files.delete(src);
Files.delete(moved);
}
}
Вывод:
a: true
b: false
c: true content=hello
Пример 6. Атрибуты файла
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class Attrs {
public static void main(String[] args) throws IOException {
Path p = Path.of("attr.txt");
Files.writeString(p, "12345");
System.out.println("Размер: " + Files.size(p) + " байт");
System.out.println("Файл? " + Files.isRegularFile(p));
System.out.println("Изменён:" + Files.getLastModifiedTime(p));
Files.delete(p);
}
}
Вывод (время зависит от системы):
Размер: 5 байт
Файл? true
Изменён:2026-05-15T14:32:08Z
Пример 7. Список содержимого каталога
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
public class ListDir {
public static void main(String[] args) throws IOException {
Path dir = Path.of("demo_dir");
Files.createDirectories(dir);
Files.writeString(dir.resolve("a.txt"), "1");
Files.writeString(dir.resolve("b.txt"), "2");
try (Stream<Path> s = Files.list(dir)) {
s.sorted().forEach(System.out::println);
}
Files.delete(dir.resolve("a.txt"));
Files.delete(dir.resolve("b.txt"));
Files.delete(dir);
}
}
Вывод:
demo_dir/a.txt
demo_dir/b.txt
Пример 8. Потоковая обработка больших файлов
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Stream;
public class StreamLines {
public static void main(String[] args) throws IOException {
Path p = Path.of("nums.txt");
Files.write(p, List.of("10", "20", "30", "40", "50"));
long sum;
try (Stream<String> lines = Files.lines(p)) {
sum = lines.mapToInt(Integer::parseInt).sum();
}
System.out.println("Сумма: " + sum);
Files.delete(p);
}
}
Вывод:
Сумма: 150
См. также
Примечание
Описание основано на официальной документации Oracle Java SE 21 API (https://docs.oracle.com/en/java/javase/21/docs/api/). Материал распространяется на условиях Oracle Free Documentation License. Тексты статьи написаны редакцией AlashEd своими словами; примеры кода — авторские.