扫描目录时java.lang.NullPointerException

时间:2013-04-29 16:20:03

标签: java io nullpointerexception

我有一个非常简单的方法,它扫描目录结构以执行检查。扫描看起来像这样:

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()调用,但是看不出这将如何帮助解决这个问题。

1 个答案:

答案 0 :(得分:3)

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

  

listFiles

     

public File [] listFiles()

     

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

     

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

     

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

     

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