【问题标题】:Using nio.relativize for a normalized path使用 nio.relativize 作为规范化路径
【发布时间】:2015-07-21 00:08:12
【问题描述】:

通常,路径会忽略它包含的所有.(此目录)。因此,c:\\personal\\.\\photos\\readme.txtc:\\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

【问题讨论】:

  • 我刚刚用 Java 11 运行它,输出是 2 倍 ..\..\index.html ¯_(ツ)_/¯

标签: java path nio


【解决方案1】:

默认情况下,路径类本身不会忽略 \\.。当您通过 normalize() 明确询问时,就会发生这种情况。这里是关于 path 的 relativize 方法的 oracle 文档

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#relativize(java.nio.file.Path) 例如,如果此路径是“/a/b”并且给定路径是“/a/x”,那么生成的相对路径可能是“../x”。

所以答案可能是,默认情况下 path 不会丢弃 \\.。与 oracle 文档一起产生您看到的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2010-10-15
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多