soc*_*soc 2 java filesystems file-io file
在Java 1.4之前,通常的做法是通过在不同的InputStreams/OutputStream之间移动字节来处理文件.
从添加了NIO的 Java 1.4 开始,建议使用Channels来做同样的事情.
使用Java 7中的NIO2,java.nio.file中还有另一个API支持像
val source = Paths.get("fooDir/fooFile.txt")
val target = Paths.get("barDir/barFile.txt")
source moveTo target
source createLinkTo target
Run Code Online (Sandbox Code Playgroud)
是旧的或多或少的无用现在对文件系统操作,除非你想手动触摸字节?
对于大多数操作,NIO2将让您做得更多/更好.
使用传统API(某些属性,ACL,文件更改通知,更好的错误处理......)几乎不可能执行某些操作.
最重要的是:这不一定更难.
回答你的问题:当你可以用两个不同的API做一些操作时,我没有看到任何旧的用户可以做得更好的用例.
有一些讨论:
Java NIO FileChannel与FileOutputstream的性能/实用性 http://mailinator.blogspot.com/2008/02/kill-myth-please-nio-is-not-faster-than.html
但我会说最新的API 设计得更快.如果他们在某些情况下不这样做,那么如果你一直在使用更新的API,那么期望jvm更新可以恢复这种情况,而无需更改任何代码.
最佳做法是尽可能使用较新的API.他们通常更善于处理像符号链接这样的角落案例.它们也更有可能直接构建在OS原语上,这将提供更好的硬件利用率.因此,对你的问题的简短回答是"是的,旧问题几乎没用".新api的一大缺点是它们需要安装更新的JRE.
我会在这里加2美分.@Ymajoros和@Matt总结得很好.
当然,新的NIO将比前辈更好.旧文件io类有很多限制.我从C++转移到了地面,发现即使Apis更容易使用,它们也缺乏很多功能.现在,如果您查看类,如果您尝试查询远程目录,您可能会看到一些缓慢或您的JVM可能会挂起.这一点在7中得到修复.另外需要注意的是,某些文件系统支持符号链接,并且有处理它的规定.正在为目录列表添加迭代器,它也将支持POSIX和ACL控件模型.