给定两个绝对路径,例如
/var/data/stuff/xyz.dat /var/data
如何创建以第二条路径为基础的相对路径?在上面的示例中,结果应为:./stuff/xyz.dat
./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.nio.file.Path#relativize自Java 1.7起就存在,如@Jirka Meluzin在其他答案中指出的那样。
java.nio.file.Path#relativize
从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