我知道文件的相对路径,并希望在Linux和Windows上将其作为File
对象处理。
在Java中指定与平台无关的路径的最佳方法是什么?
答案 0 :(得分:85)
只需使用/
即可。我已经使用它22年了。从来没有问题。
答案 1 :(得分:48)
File
类包含以下可用于平台特定文件路径的公共成员:
static String pathSeparator
:
系统相关的路径分隔符,为方便起见,表示为字符串static char pathSeparatorChar
:
依赖于系统的路径分隔符static String separator
:
系统相关的默认名称分隔符,为方便起见,表示为字符串。static char separatorChar
:
系统相关的默认名称分隔符。
答案 2 :(得分:12)
您可以在Java中使用任何路径分隔符,它可以在Unix和Windows上使用。
如果您仍想使用系统路径分隔符,则File.separator
属性将根据当前系统为您提供正确的属性。
对于root,你可以使用listRoots()
为你提供一个root数组,在Unix系统上只有一个元素,在Windows上只有你有多个驱动器。
答案 3 :(得分:7)
您可以使用静态字段File.separator来检索文件路径的特定于平台的分隔符
答案 4 :(得分:5)
Java对于File对象中的路径非常聪明。我只是使用类似“../foo/bar”的东西,它可以在这两个平台上加上MacOSX。
答案 5 :(得分:3)
java 7也支持在这里使用Paths
通过调用默认FileSystem的getPath方法获取Path。
然后您可以通过以下方式从中获取文件:
File fileSystemObtainedFile = Paths.get("C:\\foo\\bar.txt").toFile();
答案 6 :(得分:1)
就我个人而言,我喜欢使用Eclipse中的Path类来处理一般的路径,你可以单独使用它们,只需要很少的修改,因为它非常孤立。
答案 7 :(得分:0)
只有10年为时已晚。 “仅使用'/'没关系”只有一半正确(好的,四分之三)。您必须考虑数据的来源。
如果您使用Java获取路径,它将使用'/' 如果您使用Java创建路径,它将理解为'/'
但是输入到程序中的路径呢?
假设我有一系列创建配置文件(属性)的脚本。假设配置变量之一是INTERESTING_FILE,我们将其生成为包含路径的文件名。现在假设我要从中提取实际的文件名,所以我说
String[] filename = INTERESTING_FILE.split("/");
这将在Windows系统上无法正常运行
String[] filename = INTERESTING_FILE.split(pathSeparator);
将起作用(通过Paths类对其进行清洗)。
我想关键是,我不认为'/'在每种情况下都会起作用。