凡使用解析()和相对化()java.nio.file.Path类的方法?

问题描述 投票:10回答:4
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()作品?

什么是result1result2实际使用?

java path resolve
4个回答
5
投票

这些都是从我的代码库中的代码片段,帮助您了解使用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;
}

14
投票

我不明白的决心(),以及如何相对化()方法的作品?

Path resolve(Path)解决对this路径给定的路径。 Path relativize(Path)构建针对this路径给定路径的相对路径。 这是反向操作。


路径解析(路径等)

resolve()的一般使用情况下,你想回到一个新的Path对象在那里你会加入这个Path对象是相对PathPath参数:

Path p1 = Paths.get("/Users/jack");
Path p2 = Paths.get("text1.txt");
Path result1 = p1.resolve(p2);

这里result1p1p2的路径加入,那就是:/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路径解决,产生用于定位相同的文件中给定的路径的路径。

这意味着返回PathPath参数相对于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

4
投票

resolve():联接两个路径。

relativize ():构建在文件系统到另一个位置从一个位置的路径。

输出的解释:

result1: /Users/jack/text2.txt:因为你在一个绝对路径,resolve()返回路径传递经过的AS是,如果它是一个绝对路径。

result2: ../../text2.txt:摆脱/Users/jack/text2.txt你需要去两个层面高达/Users/jack/Documents/text1.txt",然后就选择`text2.txt文件。


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.