我无法理解 resolve() 和 relativize() 方法是如何工作的?
路径解析(路径)
根据路径解析给定的路径。
Path relativize(Path)
构造给定路径相对于 path 的相对路径。
这些是反向操作。this
this
路径解析(路径其他)
在 的一般用例中,您希望返回一个新对象,在该对象中,您将此对象连接到相对参数,例如:resolve()
Path
Path
Path
Path
Path p1 = Paths.get("/Users/jack");
Path p2 = Paths.get("text1.txt");
Path result1 = p1.resolve(p2);
下面将是 和 的路径连接,即: 。result1
p1
p2
/Users/jack/text1.txt
在您的示例中,传递给该方法的参数不是相对参数,而是绝对参数:Path
Path p1 = Paths.get("/Users/jack/Documents/text1.txt");
Path p2 = Paths.get("/Users/jack/text2.txt");
Path result1 = p1.resolve(p2);
如果第二个是绝对的,那么将 a“追加”到另一个是没有意义的。
因此,javadoc 认为在这种情况下,参数是作为以下结果返回的:Path
Path
resolve()
如果 other 参数是绝对路径,则此方法平凡地返回 other。
路径相对化(路径其他)
该文档更具体地说:
此方法尝试构造一个相对路径,当针对 path 进行解析时,将生成一个路径,该路径定位与给定路径相同的文件。this
这意味着返回的是参数相对于 的相对路径。Path
Path
this
Path
例如,如果 path 是 而给定路径是,则生成的相对路径将为 。this
"/a/b"
"/a/b/c/d"
"c/d"
我们将通过您的示例进行检查:
Path p1 = Paths.get("/Users/jack/Documents/text1.txt");
Path p2 = Paths.get("/Users/jack/text2.txt");
Path result2 = p1.relativize(p2);
// result2= ../../text2.txt
路径是预期的结果,因为生成的相对路径 ( ) 针对路径 () 解析生成了一个路径,该路径定位到与给定路径 () 相同的文件:../../text2.txt
../../text2.txt
this
/Users/jack/Documents/text1.txt
/Users/jack/text2.txt
Paths.of("/Users/jack/Documents/text1.txt").resolve("../../text2.txt")
returns -> /Users/jack/text2.txt