Path::resolve方法:路径连接Path类有两个比较特殊的方法,一个是resolve方法,另一个是relativize方法,这两个方法光看名字和注释并不太好理解真实的作用,所以特地在此记录。
Path::resolve方法的主要用途在于连接两个路径,例如:
如果有
Path a = Paths.get ("a");
Path b = Paths.get ("b");
那么a.resolve(b)
或者a.resolve("b")
表示的路径就是a/b
, a
作为b
的父路径进行连接。
但是如果b
是一个绝对路径,那么a.resolve(b)
的结果就不确定了,返回的结果依赖于实现类。所以在调用a.resolve(b)
之前最好先确认下 b
是否是一个绝对路径:
if(!b.isAbsolute ()){
a.resolve(b)
}else{
// ...
}
Path::relativize方法:a相对于b的路径
在 Linux 命令行环境下,如果我们当前在/a/b/c
路径,我们想切换到/a/d
目录下,我们可以cd ../../d
。这里的../../d
就可以说是/a/b/c
相对于/a/d
的路径,它表示了从/a/b/c
路径到/a/d
路径应该怎么走,而Path::relativize方法的作用就在于此。
Path::resolve字面意思是相对化,其主要用途在于求一个路径相对于另一个路径的路劲,例如:
Path a = Paths.get ("/a/b/c");
Path b = Paths.get ("/a/d");
那么a.relativize (b)
表示的路径就是../../d
。
有些特殊情况需要注意。 当执行a.resolve(b)
时:
-
如果
a
和b
都是相对路径,那么就会认为a
和b
的顶级路径是同级的,例如:Paths.get ("c/d/e").relativize (Paths.get ("f/g"))
最后得到的结果表示的路径为
..\..\..\f\g
,即认为各自的顶级路径c
、f
同级。 -
如果
a
和b
一个是相对路径、一个是绝对路径,也就是两个路径的类型不一样,那么执行的结果是取决于Path接口的实现,已知JDK默认的实现是抛出一个异常。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)