357. Java IO API - 使用 `resolve()` 拼接路径

0 阅读1分钟

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) 等方法连用,形成完整的路径处理流程。