jdk7的paths和path类通过paths.get()创建跨平台路径、resolve()安全拼接、normalize()和relativize()处理路径逻辑,并配合files类执行i/o,实现类型统一、语义清晰的路径操作。

JDK7引入的Paths和Path类,让路径操作告别了String拼接和File的诸多限制,更安全、更跨平台、也更语义清晰。核心在于:用Paths.get()创建Path对象,再通过其方法完成解析、拼接、比较等操作,全程不碰字符串拼接或硬编码分隔符。
用Paths.get()构造路径,自动适配系统分隔符
Paths.get()是创建Path实例最常用也最推荐的方式。它会根据运行环境自动选择/(Unix/Linux/macOS)或\(Windows),无需手动处理分隔符。
- 单参数:直接传入路径字符串,支持相对或绝对路径
Path home = Paths.get("/home/user");Path config = Paths.get("conf", "app.properties"); // 自动转为 conf/app.properties 或 conf\app.properties - 多参数:每个片段作为独立参数,更清晰、避免斜杠歧义
Path logFile = Paths.get("var", "log", "app.log");
用Path.resolve()安全拼接路径,不依赖字符串连接
不要用+或String.join()拼路径——容易出错(如多余/、缺失/、Windows反斜杠混乱)。resolve()是专为此设计的语义化方法:
-
base.resolve(child):将child视为**相对路径**,追加到base末尾Path base = Paths.get("src/main");Path javaDir = base.resolve("java"); // → src/main/java - 若
child是绝对路径(如以/或盘符开头),resolve()直接返回child本身,不会拼接——这是有意为之的安全机制
用Path.relativize()和Path.normalize()处理路径逻辑
真实项目中常需计算两个路径间的相对关系,或清理冗余段(如..、.、重复/):
-
normalize():消除./、../dir/..等,返回逻辑等价但更简洁的路径Paths.get("a/b/../c/./d").normalize(); // → a/c/d -
relativize():从当前路径出发,得到到达目标路径所需的相对路径Paths.get("/home/user").relativize(Paths.get("/home/user/docs/report.txt")); // → docs/report.txtPaths.get("/a/b").relativize(Paths.get("/a/c/file.txt")); // → ../c/file.txt
配合Files类执行实际I/O,保持API一致性
Path本身不操作文件,它只是路径的抽象。所有读写、判断存在性、创建目录等操作,都交给Files工具类,且全部接受Path参数:
-
Files.exists(path)、Files.isDirectory(path) -
Files.createDirectories(path)(自动创建父目录) -
Files.readAllLines(path)、Files.write(path, data)
这样整套NIO.2 API形成闭环:路径定义→路径变换→路径验证→文件操作,类型统一、意图明确、不易出错。










