145

似乎有三种相同的方法可以独立于平台获得依赖于平台的“文件分隔符”:

我们如何决定何时使用哪个?

他们之间有什么区别吗?

4

2 回答 2

153

System.getProperties()可以通过调用System.setProperty(String key, String value)或使用命令行参数来覆盖-Dfile.separator=/

File.separator获取默认文件系统的分隔符。

FileSystems.getDefault()为您提供默认文件系统。

FileSystem.getSeparator()获取文件系统的分隔符。请注意,作为一种实例方法,您可以使用它来将不同的文件系统传递给您的代码,而不是默认值,以防您需要您的代码在一个 JVM 中的多个文件系统上运行。

于 2011-11-10T05:46:59.227 回答
32

如果您的代码不跨越文件系统边界,即您只使用一个文件系统,那么使用java.io.File.separator.

如前所述,这将为您提供 FS 的默认分隔符。正如 Bringer128 解释的那样,System.getProperty("file.separator")可以通过命令行选项覆盖,并且不像java.io.File.separator.

最后一个java.nio.file.FileSystems.getDefault().getSeparator();是在 Java 7 中引入的,因此如果您希望您的代码可以跨旧 Java 版本移植,那么您现在不妨忽略它。

因此,这些选项中的每一个都与其他选项几乎相同,但并不完全相同。选择一个适合您的需求。

于 2011-11-10T05:51:00.277 回答