Шаг 105.
Язык программирования Java.
Класс Paths и интерфейс Path

На этом шаге мы рассмотрим класс Paths, а также интерфейс Path

Ранее мы рассматривали различные классы для работы с файлами. Начиная с этого шага мы будем рассматривать классы и интерфейсы из новой системы ввода-вывода (часто ее называют nio.2).

Начнем с класса Paths. Класс Paths содержит всего 2 статических метода:

public static Path get(String first, String... more);
public static Path get(URI uri);

С помощью данных функций можно получить объект, инкапсулирующий информацию о пути к файлу или директории. Рассмотрим примеры использования данных функций:

Path p1 = Paths.get("/foo/bar");
Path p2 = Paths.get(URI.create("file:///foo/bar/Main.java"));

В данных примерах используется интерфейс Path. Данный интерфейс содержит основной инструментарий для получения информации о пути к рассматриваемому объекту (файл или директория). Приведем ниже таблицу с основными функциями из интерфейса Path:

Таблица 1. Функции интерфейса Path
Функция Описание
String toString() Данная функция преобразует объект типа Path в строку.
Path getFileName() Данная функция возвращает объект типа Path, который содержит только имя файла (или директории) без полного пути к нему (к ней).
Path getName(int index) Данная функция возвращает элемент пути, который стоит на позиции index. Нумерация начинается с 0. Если задать число вне допустимого диапазона количества элементов пути, то будет брошено исключение.
int getNameCount() Возвращает количество элементов пути.
Path subpath(int beginIndex, int endIndex) Возвращает подпуть заданного пути, начиная с позиции beginIndex и заканчивая позицией endIndex - 1. Нумерация начинается с 0. Если задать число вне допустимого диапазона количества элементов пути, то будет брошено исключение.
Path getParent() Возвращает родительский элемент. Если данного элемента нет, то возвращается null.
Path getRoot() Возвращает корневой элемент. Если данного элемента нет, то возвращается null.

Также в интерфейсе Path есть функции, с помощью которых можно узнать абсолютный и относительный путь. В приведенней ниже таблице представлены такие функции.

Таблица 2. Функции для получения полного и относительного пути
Функция Описание
URI toUri() Данная функция для преобразования нашего пути к URI (про что такое URI можно прочитать здесь).
Path toAbsolutePath() Функция для преобразования пути к абсолютному путю.
Path toRealPath() Функция для преобразования пути к относительному путю.

Помимо рассмотренных ранее функций пути можно сравнивать. Для этого в интерфейсе Path есть следующая функция:

int compareTo(Path other);

Также по объекту типа Path можно проитерироваться:


Приведем ниже пример использования рассмотренных выше функций. В данном примере выдается информация о пути к файлу testDir/testDir2/testDir3/testFile.txt. Папка testDir находится в корне проекта.


import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("testDir/testDir2/testDir3/testFile.txt");

        /*Используем функцию toString*/
        System.out.println("toString(): " + path);

        /*Используем функцию getFileName*/
        System.out.println("getFileName(): " + path.getFileName());

        /*Используем функцию getParent*/
        System.out.println("getParent(): " + path.getParent());

        /*Используем функцию getRoot*/
        System.out.println("getRoot(): " + path.getRoot());

        /*Используем функцию getNameCount*/
        System.out.println("getNameCount(): " + path.getNameCount());

        /*Используем функцию getName*/
        System.out.println("getName(1): " + path.getName(1));

        /*Используем функцию subpath*/
        System.out.println("subpath(1, 3): " + path.subpath(1, 3));

        System.out.println();

        /*Используем функцию toUri*/
        System.out.println("toUri: " + path.toUri());

        /*Используем функцию toAbsolutePath*/
        System.out.println("toAbsolutePath: " + path.toAbsolutePath());

        /*Используем функцию toRealPath*/
        System.out.println("toRealPath: " + path.toRealPath());

        System.out.println();

        /*Итерируемся по объекту path*/
        System.out.println("iterate: ");
        for (Path p : path) {
            System.out.println(p);
        }
    }
}

Проект можно взять здесь


Рис. 1. Вывод программы


На следующем шаге мы начнем рассматривать класс Files

Предыдущий шаг Содержание Следующий шаг