path.relativize() 用于计算从当前路径到目标路径的相对路径字符串。调用该方法的对象作为起点,传入的参数作为终点,返回一个表示如何从起点到达终点的 path 对象。如果两个路径没有共同的根目录(例如 windows 上的不同盘符),该方法会抛出一个 illegalargumentexception。

相同父目录下的文件相对路径计算
当两个路径位于同一个目录下时,relativize 会直接忽略公共前缀,生成包含文件名或子目录名的相对路径。这是最常见的用法,适用于处理同一文件夹内的文件列表。

import java.nio.file.Path;
import java.nio.file.Paths;
public class RelativePathDemo {
public static void main(String[] args) {
// 定义两个同级的文件路径
Path fileA = Paths.get("/home/user/docs/report.txt");
Path fileB = Paths.get("/home/user/docs/image.png");
// 计算从 fileA 到 fileB 的相对路径
Path relative = fileA.relativize(fileB);
System.out.println(relative); // 输出: image.png
}
}
跨层级目录的相对路径计算
当起点和终点处于不同的层级时,relativize 会自动添加 .. 来向上回溯,直到找到最近的共同祖先目录,然后再向下导航到目标路径。这常用于构建相对于项目根目录或其他基准目录的路径。

import java.nio.file.Path;
import java.nio.file.Paths;
public class CrossLevelDemo {
public static void main(String[] args) {
// 起点:项目根目录
Path root = Paths.get("/project");
// 终点:深层嵌套的文件
Path target = Paths.get("/project/src/main/java/Main.java");
// 计算从根目录到目标文件的相对路径
Path relative = root.relativize(target);
System.out.println(relative);
// 输出: src/main/java/Main.java
}
}
不同根目录间的异常处理
在 Windows 系统中,如果尝试计算不同驱动器(如 C 盘和 D 盘)之间的相对路径,或者在 Linux 中比较绝对路径与相对路径,由于不存在共同的根节点,程序会抛出 IllegalArgumentException。开发者需要在调用前使用 startsWith 或检查根目录是否一致来避免此错误。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











