【问题标题】:java.lang.NullPointerException when scanning directories扫描目录时出现 java.lang.NullPointerException
【发布时间】:2013-04-23 09:43:17
【问题描述】:

我有一个非常简单的方法可以扫描目录结构来执行检查。扫描如下:

File file = new File(initpath);

for(File hex : file.listFiles(new HexagonNameFilter())) {

    for(File wall : hex.listFiles()) {

        for(File shelf : wall.listFiles()) {

            for(File book : shelf.listFiles()) {

                // Perform some actual work
            }
        }
     }
 }

该方法在程序执行过程中被多次调用。

不一致(意思是,在扫描过程中的某个不可预测的点),我得到一个 java.lang.NullPointerException,堆栈跟踪指向 for 语句之一(它也是不一致的)。这并不具有启发性。我正在考虑将 FilenameFilters 传递给三个 listFiles() 调用,但看不出这将如何解决问题。

【问题讨论】:

  • 坏消息:listFiles 可能返回 null:所以你需要一个 File[] 变量和一个 if 语句。或者在您自己的函数中制作 wrap listFiles。

标签: java io nullpointerexception


【解决方案1】:

您应该验证您是否在目录上调用此方法。否则,它返回 null。

列表文件

公共文件[] listFiles()

返回一个抽象路径名数组,表示目录中的文件 此抽象路径名表示的目录。

如果这个抽象路径名不代表一个目录,那么这个 方法返回 null。否则返回一个 File 对象数组, 一个用于目录中的每个文件或目录。路径名表示 目录本身和目录的父目录不是 包含在结果中。每个生成的抽象路径名是 使用 File(File, String) 从这个抽象路径名构造 构造函数。因此,如果这个路径名是绝对的,那么每个 结果路径名是绝对的;如果这个路径名是相对的,那么每个 生成的路径名将相对于同一目录。

无法保证结果数组中的名称字符串 将以任何特定顺序出现;它们不是,特别是, 保证按字母顺序出现。

返回:一组抽象路径名,表示文件和 此抽象路径名表示的目录中的目录。这 如果目录为空,则数组将为空。如果这个返回 null 抽象路径名不表示目录,或者如果 I/O 错误 发生。

【讨论】:

  • 谢谢,我认为这有助于解决问题。我将尝试使用 FileFilter 或 FilenameFilter 来确保只扫描我要扫描的目录。让我感到困惑的是,我知道我正在扫描的目录绝对不是空的并且存在 - 因此缺乏检查。然而,我现在看到我可能在点文件上调用该方法!
猜你喜欢
  • 2012-05-15
  • 2018-05-18
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多