Path p1 = Paths.get("/Users/jack/Documents/text1.txt");
Path p2 = Paths.get("/Users/jack/text2.txt");
Path result1 = p1.resolve(p2);
Path result2 = p1.relativize(p2);
System.out.println("result1: "+result1);
System.out.println("result2: "+result2);
输出
result1: /Users/jack/text2.txt
result2: ../../text2.txt
我无法理解 resolve()
和 relativize()
是如何工作的?
result1
和result2
的实际用途是什么?
最佳答案
I cannot understand how resolve() and relativize() method works?
Path resolve(Path)
根据 this
路径解析给定路径。
Path relativize(Path)
构造给定路径相对于 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);
如果第二个是绝对 Path
,则将 Path
“附加”到另一个是没有意义的。
所以 javadoc 认为在这种情况下参数作为 resolve()
的结果返回:
If the other parameter is an absolute path then this method trivially returns other.
路径相对化(其他路径)
文档更具体地说:
This method attempts to construct a relative path that when resolved against
this
path, yields a path that locates the same file as the given path.
表示返回的Path
是Path
参数相对于this
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
关于java - 在哪里使用 java.nio.file.Path 类的 resolve() 和 relativize() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50551920/