如何在Java中从两个绝对路径(或URL)构造相对路径?
给定两条绝对路径,例如
/var/data/stuff/xyz.dat
/var/data
如何创建一个使用第二个路径作为其基础的相对路径?在上面的示例中,结果应为:./stuff/xyz.dat
给定两条绝对路径,例如
/var/data/stuff/xyz.dat
/var/data
如何创建一个使用第二个路径作为其基础的相对路径?在上面的示例中,结果应为:./stuff/xyz.dat
这是一个小小的迂回,但为什么不使用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 1.7以来一直存在,正如@Jirka Meluzin在另一个答案中指出的那样。java.nio.file.Path#relativize
从Java 7开始,您可以使用相对化方法:
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