Java 对规范化路径使用nio.relatize

Java 对规范化路径使用nio.relatize,java,path,nio,Java,Path,Nio,通常,路径会忽略它包含的所有(此目录)。因此,c:\\personal\\.\\photos\\readme.txt和c:\\personal\\photos\\readme.txt应该为不同的操作提供相同的结果,但在下面的代码中,规范化路径给出了不同的结果。有人能解释一下原因吗 Path p1 = Paths.get("c:\\personal\\.\\photos\\readme.txt"); Path p2 = Paths.get("c:\\personal\\index.html");

通常,路径会忽略它包含的所有
(此目录)。因此,
c:\\personal\\.\\photos\\readme.txt
c:\\personal\\photos\\readme.txt
应该为不同的操作提供相同的结果,但在下面的代码中,规范化路径给出了不同的结果。有人能解释一下原因吗

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);

p1 = p1.normalize();
p2 = Paths.get("c:\\personal\\index.html"); 
p3 = p1.relativize(p2); 
System.out.println(p3);
输出:

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

默认情况下,路径类本身不会忽略\\.。当您通过normalize()显式询问时,就会发生这种情况。例如,在oracle关于path的relativize方法的文档中,如果此路径为“/a/b”,而给定路径为“/a/x”,则生成的相对路径可能为“./x”。 所以答案可能是,path默认情况下不会丢弃\\.。它与oracle文档一起生成您看到的输出