Получение путей файловой системы в Java

Изучите разницу между путем, абсолютным и каноническим путями. Также научитесь получать путь к файлу в Java с помощью стандартных классов IO и New IO.

1. Относительные, абсолютные и канонические пути

1.1 Относительный путь

Относительный путь — это путь, описывающий местоположение файла или папки относительно текущего рабочего каталога. В отличие от абсолютных путей, относительные пути содержат информацию, которая относится только к текущему каталогу.

Это путь, который мы обычно указываем в конструкторе класса File.

src\main\java\com\howtodoinjava\io\foo\foo.txtsrc\main\java\com\howtodoinjava\io\foo\bar\bar.txt

1.2 Абсолютный Путь

Абсолютный путь всегда содержит корневой элемент и полную иерархию каталогов, необходимую для поиска файла. Для доступа к файлу или пути больше не требуется никакой информации.

  • Абсолютные пути содержат всю необходимую информацию для поиска ресурсов, указанных в абсолютном URL-адресе.
  • Абсолютные пути могут содержать сокращения, такие как одинарные и двойные точки в путях к файлам.
C:\Users\lokesh\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\foo.txtC:\Users\lokesh\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\bar\..\foo.txt

1.3 Канонический путь

Канонические пути — это абсолютные пути после разрешения сокращений или избыточных имен, таких как точки «.» и «..» в соответствии со структурой каталогов.

Канонический путь к файлу просто «очищает» путь до абсолютного пути, удаляя и разрешая такие вещи, как точки и разрешая символические ссылки(в UNIX).

C:\Users\lokesh\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\foo.txtC:\Users\lokesh\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\bar\bar.txt

2. Получить пути к файлам с помощью java.io.File

Класс java.io.File имеет три метода для получения путей файловой системы:

  • file.getPath() : возвращает ту же строку, что была передана в качестве конструктора File.
  • file.getAbsolutePath() : возвращает путь к файлу после разрешения пути для текущего каталога пользователя. Он не разрешает сокращения, такие как одинарные и двойные точки.
  • file.getCanonicalPath() : возвращает полный путь после разрешения абсолютного пути, а также сокращений.
File file = new File("src/main/java/com/howtodoinjava/io/foo/bar/../foo.txt");String givenPath = file.getPath();String absPath = file.getAbsolutePath();String canPath = file.getCanonicalPath();System.out.println(givenPath);System.out.println(absPath);System.out.println(canPath);
 src\main\java\com\howtodoinjava\io\foo\bar\..\foo.txtC:\Users\lokes\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\bar\..\foo.txtC:\Users\lokes\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\foo.txt

3. Получите пути к файлам с помощью java.nio.file.Path

Java.nio.file.Path также предоставляет следующие методы для получения различных путей:

  • path.toAbsolutePath() – полный путь к файлу, аналогичный file.getAbsolutePath().
  • path.toRealPath() – Канонический путь, аналогичный file.getCanonicalPath().

Методы Path выдают исключение NoSuchFileException, если файл отсутствует в указанном месте. Методы File не выдают никаких исключений.

Path path = Path.of("src/main/java/com/howtodoinjava/io/foo/bar/../foo.txt");givenPath = path.toString();absPath = path.toAbsolutePath().toString();canPath = path.toRealPath().toString();System.out.println(givenPath);System.out.println(absPath);System.out.println(canPath);
 src\main\java\com\howtodoinjava\io\foo\bar\..\foo.txtC:\Users\lokes\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\bar\..\foo.txtC:\Users\lokes\IdeaProjects\Core-Java\src\main\java\com\howtodoinjava\io\foo\foo.txt

4. Заключение

В этом уроке мы рассмотрели различные типы путей файловой системы в Java и способы получения этих путей с помощью API Java.

Лучше всего всегда использовать канонические пути, если мы не уверены, содержит ли указанный путь сокращенные символы или нет.

Исходный код на Github

Прокрутить вверх