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

时间:2013-07-09 15:32:46

标签: java file nio

用更多信息重写了问题

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

然而,当我使用Maven运行它时,它不再起作用了。 toString()方法返回[.., folder, filename]而不是实际路径字符串。使用path.normalize()无济于事。使用path.toFile().getPath()会返回我正在寻找的内容,但我觉得应该只使用nio.path API来解决问题。

2 个答案:

答案 0 :(得分:40)

使用:

Paths.get(...).normalize().toString()

另一种解决方案是:

Paths.get(...).toAbsolutePath().toString()

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

答案 1 :(得分:0)

为了完成 fge's answer,我会添加一些信息:

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

那么什么是最好的?这取决于,但恕我直言,我将使用 toRealPath() 99% 的情况。

来源:Official javadoc