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

根据File.listFiles的方法javadoc

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

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

当返回这样的null结果时,如何检索错误消息/代码?

使用java.nio.file.DirectoryStream (在Java 7+中),您将获得正确的exception。

你不能。 不幸的是,API没有为您提供找出底层I / O错误的方法。

也可以看看

  • 错误4505804:File.listFiles File.listFiles()要求对返回值进行null检查 – 应该有更好的error handling

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

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

    更好的行为是,如果发生I / O错误,则总会抛出IOException 。 您不应该使用区分返回值来指示错误,然后还有其他时间throw Exception

    评估 :我们计划在即将推出的新文件系统API中解决这个长期存在的问题。

从我从File的实现中看到的,如果是 ,它将返回null

  • 该文件不是目录
  • 该文件不存在
  • 该目录是读保护的。

尽管本机代码中可能发生I / O错误,但没有“隐藏”IOException的证据。

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