做一道 Enthuware OCP 题。完全看不懂

Doing an Enthuware OCP question. Can't understand this at all

下面的代码片段会打印什么?


    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.

这意味着在进入索引之前您只需要三个 ..\。怎么是四?

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