Очень мало на уровне объяснено о синтаксисе путей, которые передаются в методы Path.of() и Paths.get(). В интернете нашла некоторую информацию о том, что:
Разные файловые системы используют разные разделители между директориями. В Windows - backslashes (экранируются), в других - forwardslashes (не экранируются). В Java можно использовать оба варианта. Путь также можно записывать отдельными строками. Несколько вариантов записей:
Path path = Paths.get("C:\\dev\\files\\windows\\license.txt");
Path path = Paths.get("C:/dev/files/windows/license.txt"); //operating system independent
Path path = Paths.get("C:", "dev", "files", "windows", "license.txt");
Path path = Paths.get("C:", "dev", "files", "windows").resolve( "license.txt"); //resolve == getChild
Вводные данные в данной задаче не подпадают под синтаксис и идея ругается, хотя на сайте валидатор принимает:
c:\
c:\test\test.txt
Вопрос 1: Как строки с неправильным синтаксисом принимаются в качестве аргумента?
Переписываю в идее вводные данные - добавляю экранирование и вывожу на экран относительные пути:
System.out.println(one.relativize(two));
System.out.println(two.relativize(one));
По тому что поняла из лекции вывод должен быть:
test\test.txt
..\\..
В реальности получаю:
../c:\test\test.txt
../c:\
Вопрос 2: Почему реальное решение другое?
Ну и
Вопрос 3: Если есть под рукой, посоветуйте где можно об этом почитать или посмотреть больше.
Ирина Алымова
51 уровень
Объясните синтаксис Path
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
23 марта 2021, 13:36
Вопрос 1: Как строки с неправильным синтаксисом принимаются в качестве аргумента?
Там же строки считываются с клавиатуры, разве нет? А при ввобе с клавиатуры не надо ничего экранировать. Экранирование нужно только в самом коде, чтобы не путались спецсимволы с обычными. Но экранированный символ - это по-прежнему один символ, а не два.
Например
выведет 3. +1
Ирина Алымова Java Developer в Nerdysoft
23 марта 2021, 13:39решение
да, тут поняла, мой завтык, я тестировала передавая напрямую
+1
Yura Moskalevich
23 марта 2021, 13:36
System.lineSeperator()
0