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);
OUTPUT
result1: /Users/jack/text2.txt
result2: ../../text2.txt
我不明白如何resolve()
和relativize()
作品?
什么是result1
和result2
实际使用?
这些都是从我的代码库中的代码片段,帮助您了解使用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;
}
而这些都是使用相对化的例子()
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;
}
我不明白的决心(),以及如何相对化()方法的作品?
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()
的结果:
如果其他参数是一个绝对路径,则此方法返回平凡等。
路径相对化(路径等)
该医生说更具体:
该方法试图建立一个相对路径,当针对
this
路径解决,产生用于定位相同的文件中给定的路径的路径。
这意味着返回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
resolve()
:联接两个路径。
relativize ()
:构建在文件系统到另一个位置从一个位置的路径。
输出的解释:
result1: /Users/jack/text2.txt
:因为你在一个绝对路径,resolve()
返回路径传递经过的AS是,如果它是一个绝对路径。
result2: ../../text2.txt
:摆脱/Users/jack/text2.txt
你需要去两个层面高达/Users/jack/Documents/text1.txt"
,然后就选择`text2.txt文件。
该resolve(Path)
是用于创建通过加入现有路径电流路径的新路径的方法。
Path path1 = Paths.get("/test1/../test2");
Path path2 = Paths.get("test3");
System.out.println(path1.resolve(path2));
其结果将是:/test1/../test2/test3
事实上,该方法相对化(路径)用于构建从一个路径对象到另一个的相对路径:
Path path1= Paths.get("E:\\test1");
Path path2= Paths.get("E:\\test2\\test3");
System.out.println(path1.relativize(path2));
System.out.println(path2.relativize(path1));
其结果将是:
..\test2\test3 relative path from path1 to path2
..\..\test1 relative path from path2 to path1