Paths

Открыта

Утилитарный класс и метод

Утилитарный класс — это класс-помощник, содержащий статические переменные и статические методы, которые выполняют определенный перечень задач, объединённых одним смыслом.

Давайте рассмотрим примеры стандартных утилитарных классов:

java.lang.Math Класс, который может выполнять множество различных математических вычислений, дает нам некоторые математические константы.
java.util.Arrays Класс содержит различные методы для работы с массивами (такие как сортировка и поиск). Этот класс также содержит статическую фабрику, которая позволяет просматривать массивы как списки.
java.lang.System Класс реализует методы для работы с системой. Чаще всего мы можем его использовать для вывода текста в консоли. Для этого мы обращаемся к статической переменной out, которая хранит в себе объект класса PrintStream, и уже у него вызываем метод println (System.out.println).

Мы можем и сами создать утилитарный класс: для этого мы просто создаем класс со статическими public методами, которые нам необходимы. Но нужно помнить, что для создания утилитарного класса необходимы весомые причины. Например, необходимость использования одного и того же метода или набора методов, выполняющего единственную задачу (скажем, сложное вычисление) из нескольких различных классов.

Давай рассмотрим пример утилитарного класса — класс Paths.

Класс Paths

Это класс состоит всего из одного статического метода — get — с разными принимаемыми параметрами.

Мы можем передать в метод get:

get(String first, String... more) Путь целиком, либо перечисление названий директорий и (или) файла в последнем аргументе.
get(URI uri) URI.

Этот утилитарный класс решает задачу преобразования пути (в виде строки) или URI в Path. Path мы уже проходили и понимаем, зачем он нам нужен и как мы с ним далее можем работать.

Часто бывает, что мы имеем дело с путем именно в виде String или URI. Вот тут-то мы и можем воспользоваться методами утилитарного класса Paths.

Давайте рассмотрим примеры:

Пример Комментарий
Path path =
Paths.get("C:\\Users\\User\\Documents\\MyFile.txt");
Передаем в метод get String (путь к файлу) и получаем сформированный Path. Далее мы можем с ним работать.
Path path = Paths.get(URI.create("file:///Users/User/Code/MyClass.java"));
Path можно так же получить и из сформированного URI.
Path path = Paths.get(System.getProperty("user.home"),"documents", "document.txt");
Указываем последовательно названия директории и файла, к которому нам нужно получить путь.

Но в самом деле есть один нюанс. С появлением Java 11 версии любая реализация метода get вызывает в себе Path.of.

public static Path get(String first, String... more) {
    return Path.of(first, more);
}

public static Path get(URI uri) {
    return Path.of(uri);
}

Теперь этот утилитарный класс может быть признан устаревшим, поэтому мы должны использовать именно Path.of для наших целей.

Было Стало
Path path =
Paths.get("C:\\Users\\User\\Documents\\MyFile.txt");
Path path =
Path.of("C:\\Users\\User\\Documents\\MyFile.txt");
Path path = Paths.get(URI.create("file:///Users/User/Code/MyClass.java"));
Path path = Path.of(URI.create("file:///Users/User/Code/MyClass.java"));
Path path = Paths.get(System.getProperty("user.home"),"documents", "document.txt");
ath path = Path.of(System.getProperty("user.home"),"documents", "document.txt");
Комментарии (20)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Георгий
Уровень 99
17 декабря 2025, 08:38
Вообще грех наверно ругать задачу "Использование Paths 2", ведь именно она заставляет читать что такое varargs и как его применять...
КириллQA Engineer в Sogaz-OMS
25 ноября 2025, 22:28
а, эм, чё это было? как будто профессор в деменции вышел лекцию читать и вот выдал, а чё хотел, никто не понял. Что до нас то донести хотели?
Константин
Уровень 52
1 октября 2025, 17:55
Почему вторая задача не принимает вариант ниже, который в консоли выводит тоже самое - не понимаю :( public static Path joinToPath(List<String> partsList) { StringBuilder str = new StringBuilder(); for (String part : partsList) { str.append(part); } return Paths.get(str.toString()); }
Анжелика
Уровень 115
29 ноября 2025, 21:47
StringBuilder не для коллекций
Пётр
Уровень 112
23 апреля 2025, 05:47
Забавно что если вызвать метод getFirst у partsList, то "Задача не компилируется на сервере". А если сделать get(0) то все ок.
Ольга
Уровень 94
20 января, 10:43
он только в 21 версии появился, а на сервере 13.0.2
НикитаОбеме в в подъезде
26 октября 2024, 16:55
для решения первой задачи не объяснено ни одного факта или понятия. Это просто смешно.
15 июля 2024, 04:13
Paths.get позволяет составлять путь из строки или из последовательности строк (элементов пути). Он был введен в Java 7 Path.of был введен в Java 11 и предоставляет альтернативный, более современный и упрощенный способ создания объектов пути. "Оба варианта выполняют одну и ту же функцию, и выбор между ними в значительной степени зависит от вашей версии Java. Если вы работаете с Java 7, вы должны использовать Paths.get. Если у вас есть Java 11 или более поздняя версия, вы можете использовать Path.of, так как он предлагает более современный и упрощенный API"
Igor Stupnik
Уровень 33
30 марта 2023, 17:39
по последней задаче добавлю свои пять копеек: в метод отправляем первый элемент и массив из оставшихся элементов.
Руслан
Уровень 114
Expert
15 июня 2023, 22:26
Как и всегда, никто последовательно в лекциях не объяснял, что вторым параметром надо подавать оставшиеся элементы в виде массива.
Никита
Уровень 1
3 сентября 2024, 06:18
Да решение в ответах вообще не красивое, никак не ожидал такой глупости
jvatechsBackend Developer в Ищу стажировкуExpert
3 января 2023, 03:33
может кому поможет: Насколько стало известно, что тут
Paths.get(String first, String... more)
String... more - ни что иное как массив элементов, так называемые "варарги" (varargs). вот что я вырыл из стэковерфлоу насчет них: Varargs можно использовать, когда мы не уверены в количестве аргументов, которые должны быть переданы в метод. Он создает массив параметров неопределенной длины в фоновом режиме, и такой параметр может обрабатываться как массив во время выполнения. Если у нас есть метод, который перегружен для приема разного количества параметров, то вместо того, чтобы перегружать метод в разное время, мы можем просто использовать концепцию varargs. Базовый метод с таким написанием выглядит примерно так:
void f(T arg1, T... args) {
//делает что-то
}
Василий
Уровень 30
12 сентября 2022, 16:02
Вторая задача хороша, решить не смог
Андрей
Уровень 48
26 сентября 2022, 21:29
Ничего хорошего, когда тебе не оставляют выбора в методе решения задачи.
Никита
Уровень 1
3 сентября 2024, 06:19
Да решение в ответах вообще не красивое, никак не ожидал такой глупости. Проще в цикле собрать string и красиво передать. А тут какие-то массивы, копии массивов...
СергейРаботает в ITQ-GroupExpert
18 июня 2022, 20:18
return Paths.get(partsList.get(0),partsList.get(1),partsList.get(2),partsList.get(3));
Почему так нельзя? Только из-за того, что так указано в исходном коде?
public static Path of(String first, String... more) {
        return FileSystems.getDefault().getPath(first, more);
    }
Так то результат тот же, ну может не так красиво конечно.
Mariia
Уровень 51
Expert
19 июня 2022, 13:30
Наверное, потому что на входе может быть лист любой длины, а такое решение не универсально.
СергейРаботает в ITQ-GroupExpert
21 июня 2022, 08:32
Точно, спасибо, так скорее всего и есть
Max
Уровень 93
19 декабря 2024, 20:57
Итератор не принимает :(((