java.io.File 与 java.nio.Files 哪个是新代码中的首选?
Posted
技术标签:
【中文标题】java.io.File 与 java.nio.Files 哪个是新代码中的首选?【英文标题】:java.io.File vs java.nio.Files which is the preferred in new code? 【发布时间】:2015-11-15 14:15:36 【问题描述】:在围绕 SO 编写答案时,一位用户试图指出 java.io.File
不应在新代码中使用,相反他认为应该使用 new 对象 java.nio.Files
;他链接到this article。
现在我已经用Java开发了好几年了,以前没有听说过这种说法;自从阅读了他的帖子以来,我一直在搜索,并没有找到很多其他来源可以证实这一点,而且就个人而言,我觉得文章中争论的许多观点都很薄弱,如果你知道如何阅读它们,错误引发的错误File 类通常会准确地告诉您问题所在。
随着我不断开发新代码,我的问题是:
这是 Java 社区中的一个活跃论点吗?对于新代码,Files 是否优于 File?两者之间的主要优点/缺点是什么?
【问题讨论】:
一个很好的理由是利用流进行文件操作,例如:将文件列表作为流而不是数组列表读取 在 NIO 的情况下,内存映射缓冲区允许直接从文件系统映射文件(无需加载到内存中)。可以在不耗尽堆空间的情况下处理非常大的文件。 【参考方案1】:我会说两者都不是“首选”。相反,我建议您查看应用程序所需的功能,并使用java.io.File
或java.nio.Files
中的哪一个更符合要求。
答案很可能是平局,或者java.nio.Files
更好。但由您或您的团队决定,而不是 SO 上的其他程序员。
这是 Java 社区中的一个活跃论点吗?
有些人会为任何事情争论。但我想说,社区(总体而言)有更重要的担忧。
【讨论】:
【参考方案2】:File
有一个更新的实现:Path
。与建设者Paths.get("...")
。而且Files
也有许多不错的实用功能和更好的实现(move
而不是有时会失败的File.renameTo
)。
Path
维护其文件系统。因此,您可以从 zip 文件系统(“jar:file:..... .zip”)中复制一些路径到另一个文件系统,反之亦然。
File.toPath()
可能有助于增量过渡。
仅Files
中的公用事业公司就可以转向盈利的新课程。
【讨论】:
【参考方案3】:您链接的documentation 给出了答案:
java.nio.file 包定义了 Java 的接口和类 访问文件、文件属性和文件系统的虚拟机。 此 API 可用于克服 java.io.File 类。 toPath 方法可用于获取 Path 使用由 File 对象表示的抽象路径来定位 文件。生成的 Path 可以与 Files 类一起使用以提供 更有效和更广泛地访问其他文件操作, 文件属性和 I/O 异常,以帮助诊断错误时 对文件的操作失败。
【讨论】:
以上是关于java.io.File 与 java.nio.Files 哪个是新代码中的首选?的主要内容,如果未能解决你的问题,请参考以下文章
java.io.File 与 java.nio.Files 哪个是新代码中的首选?