java - 在哪里使用 java.nio.file.Path 类的 resolve() 和 relativize() 方法?

标签 java path resolve

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() 是如何工作的?

result1result2的实际用途是什么?

最佳答案

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就是p1p2的路径连接,即:/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.

表示返回的PathPath参数相对于thisPath的相对路径。

例如,如果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/

相关文章:

java - 如何在 if 语句中使用 java empty HashSet?

Java无法打开具有相对路径的文件

相对于文件的 Javascript 路径

xcode - $PATH 在 xcode 中设置在哪里?

intellij-idea - IntelliJ IDEA 13.0.1 无法解析所有 Gradle 类

java - 我该如何调试这个 NullPointerException

java - Spring 启动: No matching bean found exception

java - 使用java调用soap web服务

javascript - Angularjs ui-router,如何在 $stateChangeSuccess 触发时获取预加载解析值?

javascript - Promise 解决了但没有触发