2012-07-18 98 views
0

我有以下函數遞歸搜索文件中的字符串,但它不斷給出NullPointerException。當它第一次被稱爲它似乎工作,但一旦遞歸調用自己,filesnullAndroid - 遞歸文件搜索給NullPointerException

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"); 

回答

0

今天早上我試了一下,有些系統目錄確實給isDirectory()賦了一個null值。另外一個空目錄會給回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]); 
      } 
     } 
} 
2

我看到的唯一問題是,File.listFiles()如果文件不是一個目錄,則返回null。我會建議測試searchDirectory.isDirectory()而不是假定它是。

+0

呀,這似乎是這個問題,謝謝 – enifeder 2012-07-19 03:41:28