关于Path.relativize
方法,您可以阅读
[...]此方法尝试构造一个相对路径 解决此路径,产生一个定位同一文件的路径 作为给定的路径。例如,在UNIX上,如果此路径为“/ a / b”和 给定的路径是“/ a / b / c / d”,那么得到的相对路径就是 “光盘”。 [...]
所以这个
Path p1 = Paths.get("/a/b");
Path p2 = Paths.get("/a/b/c/d");
System.out.println(p1.relativize(p2));
输出
c\d
只要我理解整个想法就像问“我目前在路径p1
给出的位置,我如何从此处获取路径p2
?”< / em>的
但对我而言,鉴于/a/b
和/a/b/.
代表相同的位置,我希望上述问题的答案是相同的,而
Path p1 = Paths.get("/a/b/.");
Path p2 = Paths.get("/a/b/c/d");
System.out.println(p1.relativize(p2));
打印
..\c\d
代替。在这种情况下,如果我在p1
给出的位置,则应用..\c\d
我将不会p2
而是\a\c\d
,所以...要么就是一些不一致或我的比喻是错误的。那么,你能帮我理解我的隐喻在哪里以及为什么错了?
答案 0 :(得分:3)
出于.
的目的,路径段p1
仅被视为另一个名称,而非当前目录的特殊情况。
如果您希望它表示当前目录,normalize
路径。
此方法的精确定义取决于实现,但是 一般来说,它来自这条路径,一条不包含的路径 冗余的名称元素。在许多文件系统中,
"."
和".."
都是 用于表示当前目录和父目录的特殊名称 目录。 在此类文件系统中,会考虑所有出现的"."
冗余。如果".."
前面有非".."
名称,那么这两个名称 被认为是多余的(识别此类名称的过程是 重复,直到它不再适用。)