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文档一起生成您看到的输出