使用 nio.relativize 作为规范化路径
Using nio.relativize for a normalized path
通常,路径会忽略它包含的所有 .
(此目录)。因此,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
路径class本身默认不忽略\\.。当您通过 normalize() 明确询问时,就会发生这种情况。 Here in oracle documentation on path's relativize method
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#relativize(java.nio.file.Path) 例如,如果这个路径是“/a/b”,给定的路径是“/a/x" 那么生成的相对路径可能是 "../x".
所以答案可能是,默认情况下路径不会丢弃 \\.。与 oracle 文档一起生成您看到的输出。
通常,路径会忽略它包含的所有 .
(此目录)。因此,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
路径class本身默认不忽略\\.。当您通过 normalize() 明确询问时,就会发生这种情况。 Here in oracle documentation on path's relativize method
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#relativize(java.nio.file.Path) 例如,如果这个路径是“/a/b”,给定的路径是“/a/x" 那么生成的相对路径可能是 "../x".所以答案可能是,默认情况下路径不会丢弃 \\.。与 oracle 文档一起生成您看到的输出。