用更多信息重写了问题
我有一些使用相对路径创建Path
对象的代码,如下所示:Paths.get("..", "folder").resolve("filename")
。后来,我想从它获取路径字符串“.. \ folder \ filename”(我在Windows上,所以反斜杠)。当我使用手动编译或从Eclipse运行此代码时,这可以正常工作。
然而,当我使用Maven运行它时,它不再起作用了。 toString()
方法返回[.., folder, filename]
而不是实际路径字符串。使用path.normalize()
无济于事。使用path.toFile().getPath()
会返回我正在寻找的内容,但我觉得应该只使用nio.path
API来解决问题。
答案 0 :(得分:40)
使用:
Paths.get(...).normalize().toString()
另一种解决方案是:
Paths.get(...).toAbsolutePath().toString()
但是,您会得到奇怪的结果:Paths.get("/tmp", "foo").toString()
在此处返回/tmp/foo
。你的文件系统是什么?
答案 1 :(得分:0)
为了完成 fge's answer,我会添加一些信息:
normalize()
只是删除路径中多余的字符串,例如 .
或..
;它不在操作系统级别运行或为您提供相对路径的绝对路径toAbsolutePath()
恰恰相反,它为您提供了名称所说的 Path
对象的绝对路径。但是...toRealPath()
也解析软链接和硬链接(是的,它们也存在于 Windows 上,所以赢得用户,你不能幸免)。因此,正如其名,它为您提供了真正的 路径。那么什么是最好的?这取决于,但恕我直言,我将使用 toRealPath()
99% 的情况。