当File.listFiles返回null时,如何检索底层错误

15
根据File.listFiles javadoc,该方法会在以下情况下返回null:

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

我知道我正在使用一个目录,但是收到了一个null结果,因此可能出现了I / O错误。我非常想知道错误是什么。
当返回这样的null结果时,如何检索错误消息/代码?
4个回答

12
很抱歉,API没有提供一种方法来了解底层的I/O错误。
另请参阅:
- Bug 4505804:`File.listFiles()`在返回值上需要`null`检查-应该有更好的错误处理
`File`的各种`listFiles`方法都有以下令人讨厌的特点:如果发生I/O错误,它们可能会返回`null`。
这种行为非常不方便,因为这意味着我不仅必须编写处理`IOException`的代码(这是可以接受的),还必须对结果进行额外的`null`检查。
更好的行为应该是,如果发生I/O错误,则始终抛出`IOException`。不应该使用特殊的返回值来有时表示错误,有时又抛出异常!
评估:我们计划在即将推出的新文件系统API中解决这个长期存在的问题。

7
使用Java 7及以上版本中的java.nio.file.DirectoryStream可以获得适当的异常。

3

根据我所看到的从File的实现, 如果:

  • 文件不是目录或者
  • 文件不存在或者
  • 目录受到读保护。

它将返回null。虽然可能会在本地代码中发生I/O错误,但没有“隐藏”的IOException的证据。


1
Javadoc 没有提到 I/O 异常,但是指出会发生 I/O 错误。这表明没有本地错误 -> 异常转换。 - Robert Munteanu

0

将文件夹的权限设置为311(或者没有读取权限),listFiles() 将返回 null。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接