Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java File.separator vs FileSystem.getSeparator()vs System.getProperty(“File.separator”)?_Java_Platform Independent - Fatal编程技术网

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

Java File.separator vs FileSystem.getSeparator()vs System.getProperty(“File.separator”)?,java,platform-independent,Java,Platform Independent,似乎有三种相同的方法可以独立地获取平台相关的“文件分隔符”平台: 我们如何决定何时使用哪个 它们之间有什么区别吗?System.getProperties()可以通过调用System.setProperty(字符串键、字符串值)或使用命令行参数-Dfile.separator=/ File.separator获取默认文件系统的分隔符 FileSystems.getDefault()获取默认文件系统 FileSystem.getSeparator()获取文件系统的分隔符。请注意,作为一种

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

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

它们之间有什么区别吗?

System.getProperties()
可以通过调用
System.setProperty(字符串键、字符串值)
或使用命令行参数
-Dfile.separator=/

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

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


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

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

如前所述,这将为您的FS获取默认分隔符。正如Bringer128所解释的,
System.getProperty(“file.separator”)
可以通过命令行选项覆盖,并且不像
java.io.file.separator
那样具有类型安全性

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


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

Cool=D顺便说一句,您能详细说明“操作多个文件系统”部分吗?@Pacerier理论上,如果我编写了一个新的文件系统(BringerFS),其分隔符为“:”,并且您的计算机有两个分区,一个在NTFS中,另一个在BringerFS中,此功能将允许您同时使用这两个分区(假设我还编写了一个Java文件系统提供程序)。我的意思是,它实际上有用吗,比如说有人有两个分区,一个Windows和一个UNIX,他正在运行我的应用程序(在他的Windows分区上),那么这个类能够访问他的UNIX文件系统吗?(我无法真正测试它,因为我没有安装另一个文件系统。)我怀疑Windows上的大多数文件系统驱动程序都会将其转换为“Windows风格”的文件系统API,从而使操作系统和非便携应用程序能够正常工作。实际使用方法必须是针对一个支持奇怪而奇妙的文件系统的操作系统,而不是像Windows这样的固定模式。哦,要回答你的另一个问题,你应该为您处理的每个文件系统提供一个不同的
文件系统
实例。
java.io
是否被弃用以支持
java.nio
?@Pacerier:不,它没有弃用。
java.io
java.nio
稍微低一点,但仍然非常有用。您可以在这里看到差异:。
nio
不替换
io
,它以多种方式扩展它(并在引擎盖下使用
io
)。你不是真的在这里得到了依赖于平台的文件分隔符吗?只是在一个独立于平台的庄园里。@Steiny,是的,更新了。一个典型的Java问题至少有3个或更多的答案