一尘不染

如何用两个绝对路径(或URL)在Java中构造一个相对路径?

java

给定两个绝对路径,例如

/var/data/stuff/xyz.dat
/var/data

如何创建以第二条路径为基础的相对路径?在上面的示例中,结果应为:./stuff/xyz.dat


阅读 425

收藏
2020-03-02

共2个答案

一尘不染

有点回旋处,但是为什么不使用URI?它具有相对方法,可以为你进行所有必要的检查。

String path = "/var/data/stuff/xyz.dat";
String base = "/var/data";
String relative = new File(base).toURI().relativize(new File(path).toURI()).getPath();
// relative == "stuff/xyz.dat"

请注意,文件路径java.nio.file.Path#relativize自Java 1.7起就存在,如@Jirka Meluzin在其他答案中指出的那样。

2020-03-02
一尘不染

从Java 7开始,你可以使用relativize方法:

import java.nio.file.Path;
import java.nio.file.Paths;

public class Test {

     public static void main(String[] args) {
        Path pathAbsolute = Paths.get("/var/data/stuff/xyz.dat");
        Path pathBase = Paths.get("/var/data");
        Path pathRelative = pathBase.relativize(pathAbsolute);
        System.out.println(pathRelative);
    }

}

输出:

stuff/xyz.dat
2020-03-02