Path: представление расположений файлов
Создавайте объекты Path, разрешайте и преобразуйте относительные пути и изменяйте компоненты путей.
«Path: представление расположений файлов» — бесплатный урок Java Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Введение в Path
Интерфейс java.nio.file.Path представляет расположение файла или каталога в файловой системе. Он заменяет устаревший класс java.io.File, предоставляя более богатый и независимый от платформы API.
import java.nio.file.*;
Path p1 = Path.of("/home/user/documents/report.txt");
Path p2 = Paths.get("/home", "user", "documents", "report.txt");
System.out.println(p1); // /home/user/documents/report.txt
System.out.println(p1.equals(p2)); // trueКомпоненты Path
Извлечение компонентов пути:
Path path = Path.of("/home/user/docs/report.txt");
System.out.println(path.getFileName()); // report.txt
System.out.println(path.getParent()); // /home/user/docs
System.out.println(path.getRoot()); // /
System.out.println(path.getNameCount()); // 4
System.out.println(path.getName(0)); // home
System.out.println(path.getName(3)); // report.txtОтносительные и абсолютные пути
Путь может быть абсолютным (начинаться от корня) или относительным (задаваться от текущего каталога). Используйте isAbsolute() для проверки, а toAbsolutePath() — чтобы разрешить относительный путь относительно текущего рабочего каталога.
Path rel = Path.of("docs/report.txt");
Path abs = Path.of("/home/user/docs/report.txt");
System.out.println(rel.isAbsolute()); // false
System.out.println(abs.isAbsolute()); // true
Path resolved = rel.toAbsolutePath(); // resolves against CWD
System.out.println(resolved);resolve: объединение путей
resolve(other) добавляет другой путь. Если other является абсолютным, он полностью заменяет текущий путь.
Path base = Path.of("/home/user");
Path docs = base.resolve("documents");
Path file = docs.resolve("report.txt");
System.out.println(file); // /home/user/documents/report.txt
// Resolving an absolute path replaces:
Path abs = base.resolve(Path.of("/etc/config"));
System.out.println(abs); // /etc/configrelativize: вычисление относительных путей
relativize(other) вычисляет относительный путь от этого пути к other:
Path from = Path.of("/home/user");
Path to = Path.of("/home/user/docs/report.txt");
Path rel = from.relativize(to);
System.out.println(rel); // docs/report.txt
// Verify:
System.out.println(from.resolve(rel)); // /home/user/docs/report.txtnormalize: удаление лишних компонентов
normalize() удаляет сегменты . и .. из пути:
Path messy = Path.of("/home/user/../user/./docs/./report.txt");
Path clean = messy.normalize();
System.out.println(clean); // /home/user/docs/report.txtstartsWith и endsWith
Проверка отношений префикса и суффикса между путями:
Path p = Path.of("/home/user/docs/report.txt");
System.out.println(p.startsWith("/home/user")); // true
System.out.println(p.startsWith("/home/other")); // false
System.out.println(p.endsWith("report.txt")); // true
System.out.println(p.endsWith("docs/report.txt")); // trueПреобразование в File и URI
При необходимости преобразуйте Path в устаревший класс File или URI:
Path path = Path.of("/home/user/report.txt");
java.io.File file = path.toFile();
System.out.println(file.exists()); // depends on filesystem
java.net.URI uri = path.toUri();
System.out.println(uri); // file:///home/user/report.txtPath на разных платформах
Path.of() использует разделитель, принятый на платформе. В Windows пути используют обратную косую черту, а в Unix — прямую. API обрабатывает это прозрачно.
// Portable path construction (works on all platforms):
Path config = Path.of("config", "app", "settings.json");
// On Unix: config/app/settings.json
// On Windows: config\app\settings.json
System.out.println(config);Перебор элементов Path
Используйте цикл for-each или iterator(), чтобы перебрать отдельные элементы имён:
Path path = Path.of("/home/user/docs/report.txt");
for (Path element : path) {
System.out.println(element); // home, user, docs, report.txt
}
// Note: root ("/") is not included in iterationsubpath: извлечение фрагмента
subpath(begin, end) возвращает относительный путь для диапазона элементов имён:
Path p = Path.of("/home/user/docs/report.txt");
// Indices: home=0, user=1, docs=2, report.txt=3
System.out.println(p.subpath(1, 3)); // user/docs
System.out.println(p.subpath(0, 2)); // home/userБыстрая проверка
Дано Path.of("/home/user").resolve("docs/file.txt"). Каков результат?
Итоги: API Path
Основные выводы:
- Path.of() / Paths.get() создают экземпляры Path
- getFileName, getParent, getRoot, getName, getNameCount используются для работы с компонентами
- resolve() добавляет путь; relativize() вычисляет относительный путь; normalize() очищает ./ ../
- startsWith/endsWith используются для проверки префикса и суффикса
- Не зависит от платформы — разделитель обрабатывается автоматически
Часто задаваемые вопросы
Урок «Path: представление расположений файлов» бесплатный?
Да — полный текст урока «Path: представление расположений файлов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Path: представление расположений файлов»?
Создавайте объекты Path, разрешайте и преобразуйте относительные пути и изменяйте компоненты путей. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Path: представление расположений файлов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Path: представление расположений файлов
- Утилита Files: чтение, запись, копирование и перемещение
- Обход деревьев каталогов с Files.walk
- WatchService: отслеживание изменений файлов