Java中的平台无关路径

jak*_*ins 63 java cross-platform file

我知道文件的相对路径,并希望能够File在Linux和Windows上将其作为对象处理.

在Java中指定独立于平台的路径的最佳方法是什么?

use*_*421 91

只是用/.我已经使用它20年了.从来没有问题.

  • @Downvoter现在已经16年了,我仍然没有遇到过任何问题.你的观点? (20认同)
  • 直到一些新的操作系统没有提出新的异国情调路径分离器才会工作!如果JVM可以处理"/"到特定的OS路径分隔符转换,那么即使这样它也会工作!因此,通常"/"是一个安全的选择,但使用显式路径分隔符是未来的傻瓜证明. (5认同)
  • 我喜欢评论作者每年编辑这个答案的方式:') (3认同)
  • @AechoLiu这只是另一个答案。没有比这更权威的了,这至少是基于证据的。适当的引用将来自JLS或JVM规范或Javadoc。 (2认同)
  • 其他 Path 类方法使用平台分隔符,因此这里: Windows 上的 Paths.get("a/b").resolve("c")` 将生成“a/b\c”,它将与文件打开一起使用和其他用例,但在相等测试中,仍然可能导致意外的错误。 (2认同)

jjn*_*guy 50

File类包含可用于特定平台的文件路径下面的公共成员:

static String pathSeparator:
系统相关的路径分隔符,为方便起见,表示为字符串.
static char pathSeparatorChar:
系统相关的路径分隔符.
static String separator:
系统相关的默认名称分隔符,为方便起见,表示为字符串. static char separatorChar:
系统相关的默认名称分隔符.

  • 这个答案需要更好的解释.`pathSeparator`和`pathSeparatorChar`指的是系统的`PATH`变量中使用的分隔符.问题是指文件路径,而不是`PATH`变量.因此,应该使用`separator`和`separatorChar`. (20认同)

Col*_*ert 13

您可以在Java中使用任何路径分隔符,它可以在Unix和Windows上使用.如果您仍想使用系统路径分隔符File.separator,则会根据当前系统为您提供正确的属性.

对于root,你可以使用listRoots()它给你一个root数组,在Unix系统上只有一个元素,在Windows上只有你有多个驱动器.

  • pathSeparator是PATH环境变量中不同条目的分隔符.对于这个问题,File.separator将是正确的选择. (2认同)
  • "你可以在Java中使用任何路径分隔符,它可以在Unix和Windows上运行." - 错了.如果在Unix上使用反斜杠(\),它将不会被识别为文件路径分隔符,它将被解释为文件名(允许Unix文件名包含反斜杠). (2认同)

Jer*_*erg 7

您可以使用静态字段File.separator来检索文件路径的特定于平台的分隔符


Ste*_*ada 5

Java对于File对象中的路径非常聪明。我只使用“ ../foo/bar”之类的东西,它可以在这两个平台以及MacOSX上使用。