0

ファイル内の文字列を再帰的に検索する次の関数がありますが、それは。を与え続けますNullPointerException。最初に呼び出されたときは機能しているように見えますが、再帰的に自分自身を呼び出すと、filesnullなります。

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()がnullを返すことです。searchDirectory.isDirectory()を想定するのではなく、テストすることをお勧めします。

于 2012-07-18T16:12:38.543 に答える
0

私は今朝それを試しました、そしていくつかのシステムディレクトリはisDirectory()にnullを与えます。また、空のディレクトリはを返す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]);
            }
        }
}
于 2012-07-18T19:30:24.510 に答える