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

时间:2011-11-10 05:32:31

标签: java platform-independent

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

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

它们之间是否有任何区别?

2 个答案:

答案 0 :(得分:127)

调用System.getProperties()或使用命令行参数System.setProperty(String key, String value)

可以覆盖

-Dfile.separator=/

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

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

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

答案 1 :(得分:26)

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

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

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

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