我知道一个文件的相对路径,并想在Linux和Windows上将其处理为File
对象。
在Java中,指定平台无关路径的最佳方法是什么?
我知道一个文件的相对路径,并想在Linux和Windows上将其处理为File
对象。
在Java中,指定平台无关路径的最佳方法是什么?
只需使用/
。 我已经使用它23.5年了,从未出现过问题。
File
类包含以下公共成员,可用于处理特定平台的文件路径:
static String pathSeparator
:
表示系统相关的路径分隔符,以字符串形式方便使用。
static char pathSeparatorChar
:
表示系统相关的路径分隔符。
static String separator
:
表示系统相关的默认名称分隔符,以字符串形式方便使用。
static char separatorChar
:
表示系统相关的默认名称分隔符。
pathSeparator
,但在OS X上,它是一个冒号(:
)。如果你把它扔进文件路径中,OS X会将其解释为文件夹名称内的正斜杠字符。例如:我意外地在用户的home文件夹中创建了一个名为Desktop/foo
的文件夹,而不是在用户桌面上创建一个名为foo
的文件夹。然而,使用普通的正斜杠(/
)可以像预期的那样工作。 - aapiercepathSeparator
和pathSeparatorChar
是指系统PATH
变量中使用的分隔符。问题涉及文件路径,而不是PATH
变量。因此,应该使用separator
和separatorChar
。 - RossBille在Java中,您可以使用任何路径分隔符,它将在Unix和Windows上都起作用。
如果您仍然想使用系统路径分隔符,则可以使用File.separator
属性,它将根据当前系统给出正确的路径分隔符。
对于根目录,您可以使用listRoots()
方法,它会返回一个根目录数组,在Unix系统上只有一个元素,在Windows上则视系统拥有的驱动器数量而定。
File.separator
来获取特定于平台的文件路径分隔符字符。Java 7同样支持在此处使用Paths
。
通过调用默认FileSystem的getPath方法获取Path。
然后,您可以通过调用以下方法从中获取文件:
File fileSystemObtainedFile = Paths.get("C:\\foo\\bar.txt").toFile();
Java在File对象中处理路径很聪明。我只需使用类似于"../foo/bar"的内容,它就可以在这两个平台以及MacOSX上正常工作。
String[] filename = INTERESTING_FILE.split("/");
String[] filename = INTERESTING_FILE.split(pathSeparator);
这将起作用(通过Paths类清洗它也是如此)。
我想重点是,我不会假设“/”在每种情况下都能正常工作。
new File(filename).getName()
。 - John个人而言,我喜欢使用Eclipse中的Path类来处理路径,因为它可以独立使用,并且只需要进行少量修改即可。
Paths.get("a/b").resolve("c")
将会得到a/b\c'
,这将适用于文件打开和其他用例,但在相等性测试中,仍可能导致意外的错误。 - Sipka