做一道 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
下面的代码片段会打印什么?
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