0Pricing
Java Academy · Урок

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/config

relativize: вычисление относительных путей

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.txt

normalize: удаление лишних компонентов

normalize() удаляет сегменты . и .. из пути:

Path messy = Path.of("/home/user/../user/./docs/./report.txt");
Path clean = messy.normalize();
System.out.println(clean); // /home/user/docs/report.txt

startsWith и 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.txt

Path на разных платформах

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 iteration

subpath: извлечение фрагмента

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 — локальная установка не требуется.

Все уроки этого курса

  1. Path: представление расположений файлов
  2. Утилита Files: чтение, запись, копирование и перемещение
  3. Обход деревьев каталогов с Files.walk
  4. WatchService: отслеживание изменений файлов
← Назад к Java Academy