0

我有以下函数可以递归搜索文件中的字符串,但是它一直给出一个NullPointerException. 当它第一次被调用时,它似乎可以工作,但是一旦它递归调用自己,它files就是null

public void recursiveSearch(File searchDirectory, String searchString){
    File[] files = searchDirectory.listFiles(); 
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()){
                recursiveSearch(files[i], searchString);
            }
            if (files[i].getName().contains(searchString)){
                searchResultFiles.add(files[i]);
            }
        }
}

这是如何调用它的示例:

recursiveSearch("/", "abc");
4

2 回答 2

2

我看到的唯一问题是 File.listFiles() 如果 File 不是目录则返回 null 。我建议测试 searchDirectory.isDirectory() 而不是假设它是。

于 2012-07-18T16:12:38.543 回答
0

我今天早上试过了,一些系统目录确实给 isDirectory() 一个空值。空目录也会返回 a null,所以只需简单地进行空指针检查,它就可以正常工作

public void recursiveSearch(File searchDirectory, String searchString){
  if(searchDirectory!=null)
    File[] files = searchDirectory.listFiles(); 
    if(files!=null)
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()){
                recursiveSearch(files[i], searchString);
            }
            if (files[i].getName().contains(searchString)){
                searchResultFiles.add(files[i]);
            }
        }
}
于 2012-07-18T19:30:24.510 回答