Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 使用文件和文件系统:在NIO之前,使用NIO以及将来使用NIO2_Java_File_File Io_Filesystems - Fatal编程技术网

Java 使用文件和文件系统:在NIO之前,使用NIO以及将来使用NIO2

Java 使用文件和文件系统:在NIO之前,使用NIO以及将来使用NIO2,java,file,file-io,filesystems,Java,File,File Io,Filesystems,在Java1.4之前,通常的做法是通过在不同的InputStreams/OutputStreams之间移动字节来处理文件 由于添加了Java1.4,因此建议使用通道来执行相同的操作 在Java7中,Java.nio.file中还将有另一个API支持以下操作 val source = Paths.get("fooDir/fooFile.txt") val target = Paths.get("barDir/barFile.txt") source moveTo target source cre

在Java1.4之前,通常的做法是通过在不同的InputStreams/OutputStreams之间移动字节来处理文件

由于添加了Java1.4,因此建议使用通道来执行相同的操作

在Java7中,Java.nio.file中还将有另一个API支持以下操作

val source = Paths.get("fooDir/fooFile.txt")
val target = Paths.get("barDir/barFile.txt")
source moveTo target
source createLinkTo target

除非您想手动触摸字节,否则现在是否可以进行文件系统操作?

如果可以,最好使用较新的API。他们通常更擅长处理像符号链接这样的角落案例。它们也更可能直接构建在操作系统原语上,从而提供更好的硬件利用率。所以对你的问题的简短回答是“是的,旧的几乎没用”。新API的最大缺点是需要安装更新的JRE。

对于大多数操作,NIO2将让您做得更多/更好

使用遗留API(某些属性、ACL、文件更改通知、更好的错误处理…)无法执行某些操作

最重要的是:这并不一定更难

回答您的问题:当您可以使用两个不同的API执行某些操作时,我看不到任何旧API可以更好地执行这些操作的用例

有一些讨论:


但我得说最新的API设计得更快。如果他们在某些情况下不这样做,那么如果您一直在使用较新的API,则可以通过jvm更新来恢复这种情况,而无需更改任何代码。

我将在此处添加我的2美分@Ymajoros和@Matt总结得很好


当然,新的NIO将比以前的更好。旧的文件io类有很多限制。我已经从C++的背景中发现,即使API更容易使用,但是它们缺少很多特征。现在,如果您查看这些类,如果您尝试查询远程目录,您可能会看到一些速度慢或者JVM可能挂起。这将在7中修复。还需要注意的是,一些文件系统支持符号链接,并且有相应的处理方法。正在为目录列表添加迭代器,它还将支持POSIX和ACL控制模型。

我怀疑NIO2不仅会取代以前的功能,还会扩展它。我还没有检查过,但我不认为你可以用NIO2一个人做所有的事情。据我所知,NIO2实际上代替了很多。例如,您不再需要
java.io.File