Делаем Enthuware OCP вопрос. Вообще не могу этого понять - PullRequest
0 голосов
/ 25 марта 2019

Что напечатает следующий фрагмент кода?


    Path p1 = Paths.get("c:\\personal\\.\\photos\\..\\readme.txt");      
    Path p2 = Paths.get("c:\\personal\\index.html");
    Path p3 = p1.relativize(p2);
    System.out.println(p3);

Видимо ответ:


    ..\..\..\..\index.html 

Но я не понимаю, как вообще. p1 начинается в c, затем в личный каталог. Тогда одна полная остановка означает текущий каталог. Затем в фотографии. Тогда двойная полная остановка означает перейти в каталог, поэтому вы должны вернуться к фотографиям. Затем readme.txt должен быть в папке с фотографиями. Который затем читался бы как c -> personal -> [current_directory] -> photos -> readme.txt.

Это означает, что вам нужно только три .. \ перед тем, как перейти к индексу. Как это четыре?

1 Ответ

0 голосов
/ 26 марта 2019

Сегменты пути . и .. в p1 рассматриваются как просто другое имя relativize, а не как особый случай для текущего каталога или родительского каталога, соответственно.

Вам нужно нормализовать путь, чтобы исключить избыточные элементы имени, такие как . и ..:

Path p1 = Paths.get("c:\\personal\\.\\photos\\..\\readme.txt");
Path p1Normalized = p1.normalize();
System.out.println(p1Normalized);

Path p2 = Paths.get("c:\\personal\\index.html");
Path p3 = p1Normalized.relativize(p2);
System.out.println(p3);

Вывод:

c:\\personal\\readme.txt
..\index.html
...