对于使用Java 7编写的新应用程序,是否还有使用java.io.File
对象的理由?还是可以将其视为已被弃用?
我认为java.nio.file.Path
可以完成所有java.io.File
所能做的事情,并且更加强大。
对于使用Java 7编写的新应用程序,是否还有使用java.io.File
对象的理由?还是可以将其视为已被弃用?
我认为java.nio.file.Path
可以完成所有java.io.File
所能做的事情,并且更加强大。
简而言之:
java.io.File
很可能永远不会被弃用 / 不被支持。 也就是说,java.nio.file.Path
是更现代的 java.nio.file
库的一部分,它可以完成 java.io.File
可以做到的所有事情,并且通常以更好的方式和更多功能实现。
对于新项目,请使用 Path
。
如果您需要遗留的 File
对象,只需调用 Path#toFile()
从 File 迁移到 Path
这个 Oracle 页面突出显示了不同之处,并将 java.io.File 功能
映射到 java.nio.file lib(包括 Path)功能
Janice J. Heiss 和 Sharon Zakhour 在 2009 年 5 月发表的文章,讨论 JDK 7 中的 NIO.2 文件系统
我们能不能将它视为已被弃用?
不行,除非在File
Javadoc中标记了它已被弃用,否则你不能将其视为已被弃用。
java.io.File
仍然没有被删除,甚至没有过时,Javadoc中也没有任何迹象表明这些事情会发生。 - user207421查看这篇关于更多信息的文章 - http://www.oracle.com/technetwork/articles/javase/nio-139333.html
基本上,从现在开始,file.Path 将成为一种常用方法,但如众所周知,Java 开发人员倾向于保持向后兼容性,我想这也是为什么他们保留了它。
我将完成@mmcrae
的非常好的回答。
是否还有使用java.io.File对象的理由,或者我们可以认为它已经过时了?
JDK类很少被弃用。
您可以在JDK 8 API弃用列表中查看自第一个JDK以来被弃用的所有类。
它仅包含Oracle文档和Java社区不建议使用的少部分类。
java.util.Date
、java.util.Vector
、java.util.Hashtable
等具有许多缺陷的类未被弃用。
但是为什么?
因为概念上弃用(deprecated)
意味着仍然存在但不鼓励使用,因为它很可能会被删除。
成千上万的程序依赖于这些设计不良的类。
对于这样的类,Java API开发人员不会发出这样的信号。
@EJP
的答案是非常正确的:
直到在Javadoc中标记为这样之前都不应该这样做。
因此,我认为您的问题在其术语中更有意义:
“既然我们有选择,我们应该使用java.io.File
还是java.nio.file.Path
进行新开发,如果答案是java.nio.file.Path
,是否可以轻松地利用java.io.File
处理使用java.io.File
的遗留项目?”
我相信java.nio.file.Path可以做到java.io.File能做的一切,而且更多。
你有答案。
这个关于旧IO的Oracle教程证实了您的想法。
Path input = file.toPath();
然后您就可以利用Path类提供的丰富功能集。
例如,假设您有一些删除文件的代码:
file.delete();
Path fp = file.toPath();
Files.delete(fp);
是的,但是许多现有的API,包括Java7自身的标准API,仍然只能使用File
类型。
Java.io.File没有被弃用。是的,java.nio.file.Path更好,但只要还有大量程序和教科书使用Java.io.File,即使出于遗留原因,也不应该被视为已弃用,因为它太重要了。这样做只会毫无意义地给自己找麻烦。例如,Android框架使用File来处理一些基本的文件操作功能,其他许多东西也是如此。
Path
是否更好,他问的是File
是否已经被弃用。 - user207421众所周知,java.nio包中的类使用Path实例而不是File实例。如果可能的话,建议在使用java.nio时使用Path类。
现在有时您必须使用File类。这是因为方法或构造函数需要File实例作为参数,但当您有选择时,请确保使用Path而不是File。
File
。我应该使用吗,是或否?” - TunakiFile
,它有点垃圾”,但File
五年甚至更长时间后仍然存在。也许我们应该庆祝一下? - mike rodent
File
而不是Path
? - piegamesPath
可以更容易地通过resolve(...)
添加子路径,或者通过getParent()
上移一个级别,等等进行修改。而File
则不能。基本上,一旦您完成了对 Path 的修改,您通常会将其转换为toFile()
,以便将其发送到旧方法中,例如FileInputStream
构造函数。 - MasterHD