gpt4 book ai didi

java - 加入 nio.path 与 Paths.get() 或 Path.resolve()

转载 作者:行者123 更新时间:2023-11-30 10:06:07 35 4
gpt4 key购买 nike

我想知道在这个例子中使用 Paths.get() 和 Path.resolve 有什么区别:

public static void main(String[] args) {
Path p1 = Paths.get("dir1","dir2","file.jpg");
Path p2 = Paths.get("").resolve("dir1/dir2/file.jpg");

System.out.println(p1.toString()); // yields: dir1/dir2/file.jpg
System.out.println(p2.toString()); // yields: dir1/dir2/file.jpg
}

看起来两者的行为似乎相同,但在 Java EE 应用程序中,我见证了 p1 将主目录分配为前缀。我找到了@Aleksandr Dubinsky 对这个 StackOverflow 问题的回答 How to combine paths in Java? , 但我不明白引用的 javadoc 的含义:

Note that Paths.get() (as suggested by someone else) doesn't have an overload taking a Path, and doing Paths.get(path.toString(), childPath) is NOT the same thing as resolve(). From the Paths.get() docs:

Note that while this method is very convenient, using it will imply an assumed reference to the default FileSystem and limit the utility of the calling code. Hence it should not be used in library code intended for flexible reuse. A more flexible alternative is to use an existing Path instance as an anchor, such as:

Path dir = ...
Path path = dir.resolve("file");

具体来说,我不明白 javadoc 想说什么“将暗示对默认文件系统的假定引用。”

最佳答案

Paths.get(...) 在某种程度上类似于 Python 的 os.path.join(...) 函数,只需使用适当的文件分隔符。 resolve 方法有一些关于参数的内部逻辑和假设。使用实际文件系统意味着此方法将例如检查参数是否是绝对路径。 resolve 方法在一般情况下将使用一些特定的文件系统,而 get 将由“默认文件系统”支持。

比较:

jshell> Paths.get("one", "/two")
$6 ==> one/two
jshell> Paths.get("one").resolve("/two")
$7 ==> /two

关于java - 加入 nio.path 与 Paths.get() 或 Path.resolve(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54835302/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com