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

Pac*_*ier 126 java platform-independent

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

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

他们之间甚至有什么不同吗?

Bri*_*128 132

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

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

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

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

  • @Pacerier理论上,如果我编写了一个具有分隔符":"的新文件系统(BringerFS),并且你有一台带有2个分区的机器,一个在NTFS中,一个在BringerFS中,这个功能可以让你同时使用它们(假设我还写了一个Java Filesystem提供程序). (3认同)
  • 酷= D顺便说一下你能详细说明"运行多个文件系统"吗? (2认同)

dar*_*ioo 29

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

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

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

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

  • @Pacerier:不,它没有被弃用.`java.io`比`java.nio`略低,但仍然非常有用.你可以在这里看到差异:https://blogs.oracle.com/slc/entry/javanio_vs_javaio.`nio`不会取代`io`,它会以多种方式扩展它(并在引擎盖下使用`io`). (11认同)