2012-04-17 8 views
1

私のSDカード内の特定のファイルを検索したいと思います。だから私は完全なファイルを一覧表示し、パターンを検索しようとしています。以下のコードを参照してくださいアンドロイドはsdカードのファイルを再帰的に表示します

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    String root_sd = Environment.getExternalStorageDirectory().toString(); 
    file = new File(root_sd); 
    listfiles(new File(root_sd)); 

} 

public void listfiles(File file) { 

    //file = new File(path); 
    // file = new File(root_sd) ; 
    File list[] = file.listFiles(); 
    Log.i("DIR", "PATH" +file.getPath()); 
    for (int i = 0; i < list.length; i++) { 
     // myList.add(list[i].getName()); 
     File temp_file = new File(file.getAbsolutePath(),list[i].getName()); 
     Log.i("DIR", "PATH" +temp_file.getAbsolutePath()); 
     if (temp_file.isFile() && temp_file.listFiles() != null) { 
      Log.i("inside", "call fn"); 
      listfiles(temp_file); 

     } else { 
      if (list[i].getName().toLowerCase().contains("pattern1")) 
       Log.i("File", i + list[i].getName()); 
      if (list[i].getName().toLowerCase().contains("pattern2")) 
       Log.i("File", i + list[i].getName()); 

     } 
    } 

ここでは第1レベルの検索のみが行われています。この条件は、常にfalseを返し、再帰呼び出しは行われません。if (temp_file.isFile() && temp_file.listFiles() != null)

修正してください。あなたの答えと時間をありがとう。

+1

'isFile()'ではなく '.isDirectory()'ですか?それがファイルであるときは、リストは 'null'でなければなりません。ディレクトリのみを一覧表示できます。 – zapl

答えて

2

temp_file.isFile()がtrueを返した場合、それはファイルであることを意味し、したがってtemp_file.listFiles()は自動的にnullになり、ステートメント全体が偽になります。したがって、結合されたステートメントは常にfalseを返します。必要なのは、&&の代わりに||です。

+1

listFiles!= nullという条件を1つだけ保持する必要があります – png