357. Java IO API - 使用 resolve() 拼接路径
在 Java 的 java.nio.file.Path 中,我们经常需要将两个路径拼接成一个完整路径。这时可以使用 resolve() 方法。
🧠 基本原理
Path resolved = basePath.resolve(otherPath);
- 如果
otherPath是一个 相对路径(不带根元素),则它会被附加到basePath后面。 - 如果
otherPath是一个 绝对路径,则resolve()会直接返回otherPath本身,忽略 basePath。
✅ 示例 1:拼接相对路径
// Unix/Linux/Mac 示例
Path p1 = Paths.get("/home/joe/foo");
Path result = p1.resolve("bar");
System.out.println(result);
输出:
/home/joe/foo/bar
// Windows 示例
Path p1 = Paths.get("C:\\home\\joe\\foo");
Path result = p1.resolve("bar");
System.out.println(result);
输出:
C:\home\joe\foo\bar
🎯 适用场景:
- 构建完整的文件路径,例如日志目录、上传目录等
- 用于遍历路径结构
⚠️ 示例 2:传入绝对路径
Path base = Paths.get("foo");
Path abs = Paths.get("/home/joe");
Path result = base.resolve(abs);
System.out.println(result);
输出:
/home/joe
📌 解释:
- 因为
/home/joe是一个绝对路径,resolve()会忽略 base(foo),直接返回传入的那个路径。
🚨 注意事项:
- 使用
resolve()时要确保你传入的是相对路径(除非你明确想覆盖)。
📌 总结表:
| 场景 | 示例 | 结果 |
|---|---|---|
| 拼接相对路径 | /home/joe/foo.resolve("bar") | /home/joe/foo/bar |
| 拼接绝对路径 | foo.resolve("/home/joe") | /home/joe |
| 绝对路径拼接相对路径 | C:\\base\\dir.resolve("file.txt") | C:\base\dir\file.txt |
🛠️ 小贴士(Best Practices)
-
用于组织文件路径时更清晰可靠,避免手动字符串拼接:
// 错误方式(不推荐) String path = "/home/joe/" + "bar"; // 推荐方式 Path fullPath = Paths.get("/home/joe").resolve("bar"); -
可与
Files.exists(path)、Files.readAllLines(path)等方法连用,形成完整的路径处理流程。