java.io.File与java.nio.Files在新代码中哪个是首选?

java.io.File与java.nio.Files在新代码中哪个是首选?,java,file,io,nio,java-io,Java,File,Io,Nio,Java Io,在围绕这个问题写答案时,一位用户试图指出新代码中不应该使用java.io.File,相反,他认为应该使用新对象java.nio.Files;他链接到 现在我已经用Java开发了好几年了,以前没有听过这种说法;自从读了他的文章后,我一直在搜索,没有找到很多其他来源来证实这一点,就我个人而言,我觉得这篇文章中的许多观点都很薄弱,如果你知道如何阅读它们,File类抛出的错误通常会告诉你到底是什么问题 随着我不断开发新代码,我的问题是: 这是Java社区中一个活跃的论点吗?对于新代码,是否首选?两者之间

在围绕这个问题写答案时,一位用户试图指出新代码中不应该使用
java.io.File
,相反,他认为应该使用新对象
java.nio.Files
;他链接到

现在我已经用Java开发了好几年了,以前没有听过这种说法;自从读了他的文章后,我一直在搜索,没有找到很多其他来源来证实这一点,就我个人而言,我觉得这篇文章中的许多观点都很薄弱,如果你知道如何阅读它们,File类抛出的错误通常会告诉你到底是什么问题

随着我不断开发新代码,我的问题是:

这是Java社区中一个活跃的论点吗?对于新代码,是否首选?两者之间的主要优点/缺点是什么?

您链接的答案如下:

file包定义了java的接口和类 用于访问文件、文件属性和文件系统的虚拟机。 此API可用于克服 java.io.File类。toPath方法可用于获取路径 使用文件对象表示的抽象路径来定位 文件生成的路径可与要提供的文件类一起使用 更高效、更广泛地访问其他文件操作, 文件属性和I/O异常,以帮助在 对文件的操作失败


文件
有一个更新的实现:
路径
。使用生成器
路径。获取(“…”
)。而且
文件
有许多很好的实用程序函数,实现也更好(
移动
,而不是有时失败的
文件。重命名为

路径维护其文件系统。因此,您可以从一个zip文件系统(“jar:file:…...zip”)中复制到另一个文件系统的路径,反之亦然

File.toPath()
可能有助于增量转换


只有
文件中的实用程序才能使新的类变得有利可图。

我认为两者都不是“首选”。相反,我建议您查看应用程序所需的功能,并使用
java.io.File
java.nio.Files
中的哪一个更好地满足要求

答案可能是平局,或者
java.nio.Files
更好。但这取决于您或您的团队,而不是其他程序员


这是Java社区中一个活跃的论点吗


有些人什么事都会争论。但是我要说的是,社区(通常)有更重要的担忧。

一个很好的理由是利用流进行文件操作,例如:将文件列表作为流而不是arraylistIn读取。对于NIO,内存映射缓冲区允许直接从文件系统映射文件(无需加载到内存)。可以在不耗尽堆空间的情况下处理非常大的文件。