File.separator vs FileSystem.getSeparator() vs System.getProperty(“file.separator”)?

2022-08-31 07:50:46

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

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

它们之间有什么区别吗?


答案 1

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

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

FileSystems.getDefault()获取默认文件系统。

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


答案 2

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

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

最后一个是在Java 7中引入的,所以如果你想让你的代码在较旧的Java版本之间移植,你最好暂时忽略它。java.nio.file.FileSystems.getDefault().getSeparator();

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


推荐