Java 7:路径与文件

时间:2011-08-01 19:26:50

标签: java file-io path java-7 nio

对于用Java 7编写的新应用程序,是否有任何理由再使用java.io.File对象,或者我们是否可以认为它已被弃用?

我相信java.nio.file.Path可以完成java.io.File可以做的所有事情。

8 个答案:

答案 0 :(得分:137)

长话短说:

java.io.File很可能从不被弃用/不受支持。也就是说,java.nio.file.Path是更现代的java.nio.file lib的一部分,并且所有java.io.File都可以,但通常以更好的方式,更多。

对于新项目,请使用Path

如果您需要File遗产对象,请致电Path#toFile()

从文件迁移到路径

This Oracle page highlights differences, and maps java.io.File functionality to java.nio.file lib (including Path) functionality

Article by Janice J. Heiss and Sharon Zakhour, May 2009, discussing NIO.2 File System in JDK 7

答案 1 :(得分:15)

  

我们可以考虑弃用吗?

不,你不能认为它已被弃用,除非并且直到它在File Javadoc中如此标记。

答案 2 :(得分:7)

查看此文章了解更多信息 - http://www.oracle.com/technetwork/articles/javase/nio-139333.html

基本上file.Path将是从现在开始的方式,但众所周知,Java人们倾向于保持背部兼容性,所以我猜这就是他们离开它的原因。

答案 3 :(得分:4)

是的,但许多现有的API(包括Java7自己的标准API)仍然只能使用File类型。

答案 4 :(得分:3)

我将完成@mmcrae的非常好的答案。

  

是否有任何理由再使用java.io.File对象,或者我们可以   认为它已被弃用?

JDK类很少被弃用 您可以在the JDK 8 API deprecates list上看到自第一个JDK以来弃用的所有类 它只包含Oracle文档和Java社区不鼓励使用的一小部分类 不推荐使用java.util.Datejava.util.Vectorjava.util.Hashtable ...具有如此多缺陷的类。
但为什么 ?
因为概念上某些deprecated意味着仍然存在但不鼓励使用,因为它肯定会被删除 成千上万的程序依赖于这些设计糟糕的课程 对于这样的类,Java API开发人员不会给出这样的信号。

@EJP的答案非常正确:

  

除非并且直到它在Javadoc中如此标记。

所以,我认为你的问题在其术语中更有意义:
"我们可以选择使用java.io.Filejava.nio.file.Path进行新的开发,如果答案是java.nio.file.Path,您是否可以轻松利用java.io.File使用java.io.File?"

的旧项目
  

我相信java.nio.file.Path可以完成java.io.File可以做的所有事情   等等。

你有答案。

关于遗留IO的

This oracle tutorial确认了您的想法。

  

在Java SE 7发布之前,java.io.File类是   用于文件I / O的机制,但它有几个缺点。

     

许多方法在失败时都没有抛出异常,所以就是这样   无法获得有用的错误消息。例如,如果是文件   删除失败,程序将收到"删除失败"但   我不知道是不是因为文件不存在,用户没有   有权限,或者还有其他问题。

     

重命名方法不能跨平台一致地工作。有   没有真正支持符号链接。

     

需要更多对元数据的支持,例如文件权限,文件   所有者和其他安全属性。

     

访问文件元数据效率低下。

     

许多File方法都没有扩展。请求一个大目录   在服务器上列出可能会导致挂起。大目录可以   还会导致内存资源问题,从而导致拒绝服务。

     

无法编写可递归遍历的可靠代码   文件树,如果有圆形符号则适当地响应   链接。

java.io.File存在许多缺点,我们真的没有理由将这个课程用于新的发展 即使对于使用java.io.File的遗留代码,Oracle也会提供使用Path的提示。

  

也许你有遗留代码使用java.io.File并且想要   利用最小的java.nio.file.Path功能   对您的代码的影响。

     

java.io.File类提供了toPath方法,该方法转换了   旧样式文件实例到java.nio.file.Path实例,如下所示:

Path input = file.toPath();
  

然后,您可以利用可用的丰富功能集   路径类。

     

例如,假设您有一些删除文件的代码:

file.delete();
  

您可以修改此代码以使用Files.delete方法,如下所示:

Path fp = file.toPath();
Files.delete(fp);

答案 5 :(得分:1)

不推荐使用Java.io.File。是的java.nio.file.Path是更好的,但只要有大量的程序和教科书使用Java.io.File,如果仅出于遗留原因,它不应被视为已弃用,它太重要了。这样做只会在工作中投入一把扳手而不会获得任何好处。例如,Android框架使用File来实现一些基本的文件处理功能,还有许多其他功能。

答案 6 :(得分:0)

众所周知,java.nio 包中的类使用 Path 实例,而不是 File 实例。如果尽可能使用 java.nio,建议使用 Path 类。

现在有时您将不得不使用 File 类。那是因为方法或构造函数想要将 File 实例作为参数,但是当您有选择时,请确保在 File 上使用 Path

答案 7 :(得分:-8)

  

对于用Java 7编写的新应用程序,是否有任何理由使用   java.io.File对象了,还是我们可以考虑弃用它?

这有点像说:"如果拿破仑入侵俄罗斯, 这些布鲁塞尔豆芽真的好吃吗?"

关于问题的第二部分,您确实可以认为它已被弃用。截至2018年1月,它不被弃用。但是没有什么可以阻止你 考虑 。这是否会在今生或下一代中获得任何优势是不可能的。