一模一样似乎有三种独立获得平台相关的“文件分隔符”平台的方法:
java.io.File.separator
java.nio.file.FileSystems.getDefault().getSeparator();
System.getProperty("file.separator")
我们如何决定何时使用哪一个?
他们之间有什么区别吗?
可以通过调用 System.setProperty(String key, String value)或使用命令行参数 -Dfile.separator=/覆盖 System.getProperties()
System.setProperty(String key, String value)
-Dfile.separator=/
System.getProperties()
File.separator获取默认文件系统的分隔符。
File.separator
FileSystems.getDefault()为您提供默认的文件系统。
FileSystems.getDefault()
FileSystem.getSeparator()为文件系统提供分隔符。请注意,作为一个实例方法,您可以使用这种方法将不同的文件系统传递给您的代码,而不是默认的代码,以防您需要代码在一个 JVM 中操作多个文件系统。
FileSystem.getSeparator()
如果您的代码没有跨越文件系统边界,也就是说,您只使用一个文件系统,那么使用 java.io.File.separator。
正如解释的那样,这将为 FS 提供默认的分隔符。正如 Bringer 128所解释的,System.getProperty("file.separator")可以通过命令行选项重写,而且不像 java.io.File.separator那样是类型安全的。
最后一个是在 Java7中引入的 java.nio.file.FileSystems.getDefault().getSeparator();,所以如果您希望您的代码可以跨旧的 Java 版本移植,那么现在可以忽略它。
因此,这些选项中的每一个都几乎与其他选项相同,但并不完全相同。选择一个适合你需要的。