53

用更多信息重写问题

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

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

4

2 回答 2

61

利用:

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

另一个解决方案是:

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

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

于 2013-07-09T15:37:03.253 回答
4

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

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

那么什么是最好的呢?这取决于,但我个人使用toRealPath()99% 的案例。

来源:官方javadoc

于 2021-08-09T14:02:55.693 回答