sag*_*ani 10 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);
Run Code Online (Sandbox Code Playgroud)
OUTPUT
result1: /Users/jack/text2.txt
result2: ../../text2.txt
Run Code Online (Sandbox Code Playgroud)
我不知道如何resolve()和relativize()作品?
什么是result1和result2?的实际用途?
dav*_*xxx 15
我无法理解resolve()和relativize()方法是如何工作的?
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);
Run Code Online (Sandbox Code Playgroud)
这里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);
Run Code Online (Sandbox Code Playgroud)
Path如果第二个是绝对的,那么将"追加" 给另一个是没有意义的Path.
所以javadoc认为在这种情况下,参数是作为以下结果返回的resolve():
如果另一个参数是绝对路径,则此方法通常会返回其他参数.
路径相对化(路径其他)
该文件更具体地说:
此方法尝试构造一个相对路径,该路径在针对
this路径解析时,生成一个路径,该路径定位与给定路径相同的文件.
这意味着返回的Path是相对于Path参数 的相对路径this Path.
例如,如果thispath是"/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
Run Code Online (Sandbox Code Playgroud)
该../../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
Run Code Online (Sandbox Code Playgroud)
resolve():连接两个路径。
relativize ():构造从文件系统中一个位置到另一位置的路径。
输出说明:
result1: /Users/jack/text2.txt:因为您输入的是绝对路径,resolve()所以如果它是绝对路径,则按原样返回通过的路径。
result2: ../../text2.txt:要进入该目录/Users/jack/text2.txt,/Users/jack/Documents/text1.txt"您需要向上两个级别,然后只需选择`text2.txt文件。
这些是我代码库中的代码段,可帮助您了解resolve()方法的使用
private File initUsersText() throws Exception
{
Path dir = testdir.getPath().toRealPath();
FS.ensureDirExists(dir.toFile());
File users = dir.resolve("users.txt").toFile();
writeUser( users );
return users;
}
private File initUsersText() throws Exception
{
Path dir = testdir.getPath().toRealPath();
FS.ensureDirExists(dir.toFile());
File users = dir.resolve("users.txt").toFile();
writeUser( users );
return users;
}
Run Code Online (Sandbox Code Playgroud)
这些是使用relativize()的示例
public ScopePath pathToClassName(Path file) {
if (!isValidClass(file))
return null;
Path relativePath = root.relativize(root.resolve(file));
String withoutExtension = removeExtension(relativePath.toString());
return new ScopePath(withoutExtension.replace(File.separator, "."));
}
private String getRelativePath(Path p) {
String relativePath = packageDir.relativize(p)
.toString();
if (File.separator.equals("\\")) {
relativePath = relativePath.replace("\\", "/");
}
return relativePath;
}
Run Code Online (Sandbox Code Playgroud)
如果 other 参数是绝对路径,则此方法通常会返回 other。
Path p1 = Paths.get("/usr");
Path p2 = Paths.get("/etc");
Path p3 = p1.resolve(p2); // returns /etc
Run Code Online (Sandbox Code Playgroud)
如果 other 是空路径,则此方法将简单地返回此路径。
Path p1 = Paths.get("/usr");
Path p2 = Paths.get("");
Path p3 = p1.resolve(p2); // returns /usr
Run Code Online (Sandbox Code Playgroud)
否则,此方法会将此路径视为目录,并根据此路径解析给定路径。
Path p1 = Paths.get("/usr");
Path p2 = Paths.get("local");
Path p3 = p1.resolve(p2); // returns /usr/local
Run Code Online (Sandbox Code Playgroud)
Path p1 = Paths.get("/usr");
Path p2 = Paths.get("/usr/local");
Path p3 = p1.relativize(p2); // returns local
Run Code Online (Sandbox Code Playgroud)
这也意味着
Path p1 = Paths.get("/usr");
Path p2 = Paths.get("/usr/../usr/local");
Path p3 = p1.relativize(p2); // returns local
Run Code Online (Sandbox Code Playgroud)
但如果两条路径相等则返回空路径
Path p1 = Paths.get("/usr");
Path p2 = Paths.get("/usr/../usr");
Path p3 = p1.relativize(p2); // returns empty path
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8684 次 |
| 最近记录: |