我知道文件的相对路径,并希望将其作为File
对象在Linux和Windows上进行处理。
在Java中指定平台独立路径的最佳方法是什么?
Answers:
本File
类包含可用于特定平台的文件路径下面的公共成员:
static String pathSeparator
:
系统相关的路径分隔符,为方便起见,用字符串表示。
static char pathSeparatorChar
:
系统相关的路径分隔符。
static String separator
:
系统相关的默认名称分隔符,为方便起见,用字符串表示。static char separatorChar
:
取决于系统的默认名称分隔符。
pathSeparator
并pathSeparatorChar
参考系统PATH
变量中使用的分隔符。问题是指向文件路径,而不是PATH
变量。因此,separator
和separatorChar
应该被使用。
只需使用/
。我已经使用23.5年了。没问题。
Update
,看到了Now, I'm sure I've seen it documented
那个答案中的单词。因此,我认为这应该是正确的。我今天遇到这个问题,并在SO中找到了答案。您和那个答案将帮助我解决该问题。我只是不想在这个分析器中投下反对票,因为我知道你是对的。
您可以在Java中使用任何路径分隔符,它在Unix和Windows上均可使用。如果仍要使用系统路径分隔符,则可以使用该File.separator
属性,根据当前系统为您提供正确的属性。
对于根,可以使用listRoots()
,它为您提供一组根,在Unix系统上只有一个元素,而在Windows上则与驱动器一样多。
就个人而言,我通常喜欢使用Eclipse中的Path类来处理路径,您可以将其独立使用,而无需做太多修改就可以使用它。
仅晚了10年。...“使用'/'没关系”只有一半正确(好的,四分之三)。您必须考虑数据的来源。
如果在Java中获得路径,它将使用'/'如果在Java中创建路径,它将理解'/'
但是输入到程序的路径呢?
假设我有一系列创建配置文件(属性)的脚本。假设配置变量之一是INTERESTING_FILE,我们将其生成为包含路径的文件名。现在假设我要从中提取实际的文件名,所以我说
String[] filename = INTERESTING_FILE.split("/");
但是,这在Windows系统上是不正常的
String[] filename = INTERESTING_FILE.split(pathSeparator);
将会起作用(就像通过Paths类清洗它一样)。
我想要指出的是,我不认为'/'在每种情况下都会起作用。
pathSeparator
在应用程序中使用,但在OS X上使用冒号(:
)。如果将其扔到文件路径中,则OS X会将其解释为文件夹名称中的正斜杠字符。例如:foo
我没有在用户的桌面上创建一个命名文件夹,而是意外地Desktop/foo
在用户的主文件夹中创建了一个从字面上命名的文件夹。但是,使用纯正斜杠(/
)可以按预期工作。