在 Java 中加入路径

新手上路,请多包涵

Python 我可以加入两条路径 os.path.join

 os.path.join("foo", "bar") # => "foo/bar"

I’m trying to achive the same in Java, without worrying if the OS is Unix , Solaris or Windows :

 public static void main(String[] args) {
    Path currentRelativePath = Paths.get("");
    String current_dir = currentRelativePath.toAbsolutePath().toString();
    String filename = "data/foo.txt";
    Path filepath = currentRelativePath.resolve(filename);

    // "data/foo.txt"
    System.out.println(filepath);

}

I was expecting that Path.resolve( ) would join my current directory /home/user/test with data/foo.txt making /home/user/test/data/foo.txt .我错了什么?

原文由 cybertextron 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 433
2 个回答

尽管使用 empty String 获取当前目录的原始解决方案有效。但建议对当前目录使用 user.home user.dir 属性,对主目录使用 --- 属性。

 Path currentPath = Paths.get(System.getProperty("user.dir"));
Path filePath = Paths.get(currentPath.toString(), "data", "foo.txt");
System.out.println(filePath.toString());

输出:

 /Users/user/coding/data/foo.txt


来自 Java Path 类文档:

如果 Path 仅包含一个名为 empty 的名称元素,则该 Path 被视为空路径。使用文件系统的 empty path is equivalent to accessing the default directory 访问文件。


为什么 Paths.get("").toAbsolutePath() 有效

当将空字符串传递给 Paths.get("") 时,返回的 Path 对象包含空路径。但是当我们调用 Path.toAbsolutePath() 时,它会检查路径长度是否大于零,否则它使用 user.dir 系统属性并返回当前路径。

这是 Unix 文件系统实现的代码: UnixPath.toAbsolutePath()


基本上,您需要在解析当前目录路径后再次创建 Path 实例。

此外,我建议使用 File.separatorChar 用于平台独立代码。

 Path currentRelativePath = Paths.get("");
Path currentDir = currentRelativePath.toAbsolutePath(); // <-- Get the Path and use resolve on it.
String filename = "data" + File.separatorChar + "foo.txt";
Path filepath = currentDir.resolve(filename);

// "data/foo.txt"
System.out.println(filepath);

输出:

 /Users/user/coding/data/foo.txt

原文由 YoungHobbit 发布,翻译遵循 CC BY-SA 3.0 许可协议

Paths#get(String first, String... more) 声明,

将路径字符串或连接形成路径字符串 的字符串序列 转换为 Path

A Path 表示 路径,如果 first 是空字符串并且 more 不包含任何非空字符串,则返回。

要获取当前用户目录,您可以简单地使用 System.getProperty("user.dir")

 Path path = Paths.get(System.getProperty("user.dir"), "abc.txt");
System.out.println(path);

此外, get 方法使用 可变长度参数 String ,它将用于提供后续路径字符串。因此,要为 --- 创建 Path /test/inside/abc.txt 你必须按以下方式使用它,

 Path path = Paths.get("/test", "inside", "abc.txt");

原文由 akash 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题