Path类有两个比较特殊的方法,一个是resolve方法,另一个是relativize方法,这两个方法光看名字和注释并不太好理解真实的作用,所以特地在此记录。
Path::resolve方法:路径连接
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默认的实现是抛出一个异常。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15275.html