用更多信息重写了问题
我有一些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此处.你的文件系统是什么?
为了完成 fge的答案,我将添加一些信息:
normalize()只需删除路径中多余的字符串,例如.
or ..;它不在操作系统级别运行或为您提供相对路径的绝对路径toAbsolutePath()相反,正如其名称所示,它提供了对象的绝对路径Path。但...toRealPath()还可以解析软链接和硬链接(是的,它们也存在于 Windows 上,所以赢得用户,您也不能幸免)。因此,正如其名称所示,它为您提供了真正的路径。那么什么是最好的呢?这要看情况,但我个人使用了toRealPath()99% 的情况。
正如Roberto Bonvallet所指出的,toRealPath()如果文件尚不存在,since 会抛出异常,例如,您想要创建它。在这种情况下我更喜欢toAbsolutePath().
来源:官方javadoc
| 归档时间: |
|
| 查看次数: |
38473 次 |
| 最近记录: |