如何从java.nio.Path获取路径字符串?

Jor*_*orn 31 java nio file

用更多信息重写了问题

我有一些Path使用相对路径创建对象的代码,如下所示:Paths.get("..", "folder").resolve("filename").后来,我想从它获取路径字符串"..\folder\filename"(我在Windows上,所以反斜杠).当我使用手动编译或从Eclipse运行此代码时,这很好.

但是,当我使用Maven运行它时,它不再起作用了.该toString()方法返回[.., folder, filename]而不是实际的路径字符串.使用path.normalize()没有帮助.使用path.toFile().getPath()确实返回我正在寻找的东西,但我觉得应该只使用nio.pathAPI 的解决方案.

fge*_*fge 41

使用:

Paths.get(...).normalize().toString()
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是:

Paths.get(...).toAbsolutePath().toString()
Run Code Online (Sandbox Code Playgroud)

但是,你会得到奇怪的结果:Paths.get("/tmp", "foo").toString()返回/tmp/foo此处.你的文件系统是什么?


Mar*_*lla 7

为了完成 fge的答案,我将添加一些信息:

  1. normalize()只需删除路径中多余的字符串,例如. or ..;它不在操作系统级别运行或为您提供相对路径的绝对路径
  2. toAbsolutePath()相反,正如其名称所示,它提供了对象的绝对路径Path。但...
  3. toRealPath()还可以解析软链接和硬链接(是的,它们也存在于 Windows 上,所以赢得用户,您也不能幸免)。因此,正如其名称所示,它为您提供了真正的路径。

那么什么是最好的呢?这要看情况,但我个人使用了toRealPath()99% 的情况。

正如Roberto Bonvallet所指出的,toRealPath()如果文件尚不存在,since 会抛出异常,例如,您想要创建它。在这种情况下我更喜欢toAbsolutePath().

来源:官方javadoc