File.listFiles返回null时检索基础错误

时间:2010-07-12 11:41:01

标签: java file-io

根据File.listFiles javadoc方法

  

如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。

我知道我正在使用目录,但收到null结果,因此必须出现I / O错误。我对这个错误非常感兴趣。

如果返回此类null结果,如何检索错误消息/代码?

4 个答案:

答案 0 :(得分:12)

你做不到。不幸的是,API没有为您提供找出基础I / O错误的方法。

另见

  • Bug 4505804: File.listFiles() requires null check on return value - should have better error handling
      

    listFiles的各种File方法都有以下烦人的功能:   如果发生I / O错误,它们可能会返回null

         

    这种行为非常不方便,因为它不仅意味着   我必须有处理IOException的代码(这很好),但我也必须这样做   对结果进行额外的null检查。

         

    更好的行为是,如果发生I / O错误,那么总是IOException   被抛出。您有时不应使用区分返回值   表示错误,然后是其他时间throw Exception s!

         

    评估:我们计划在即将到来的时候解决这个长期存在的问题   新的文件系统API。

答案 1 :(得分:7)

使用java.nio.file.DirectoryStream(在Java 7+中),您将获得适当的例外。

答案 2 :(得分:3)

从我看到的from an implementation of File,如果

,它将返回null
  • 该文件不是目录
  • 该文件不存在
  • 目录是读保护的。

虽然本机代码中可能出现I / O错误,但没有“隐藏”IOException的证据。

答案 3 :(得分:0)

将perm设置为文件夹311(或者没有读取的内容),listFiles()将返回null