4

Android のディレクトリを再帰的にスキャンしてファイル名を表示するにはどうすればよいですか? スキャンしようとしていますが、遅いです (強制終了または待機)。この質問FileWalkerに対する別の回答で指定されたクラスを使用しています。

4

2 に答える 2

19

ほとんどの場合、非 UI スレッドからのみファイル システムにアクセスする必要があります。そうしないと、UI スレッドが長時間ブロックされ、ANR が発生するリスクがあります。で FileWalker を実行しAsyncTaskますdoInBackground()

これは、FileWalker のわずかに最適化されたバージョンです。

public class Filewalker {

    public void walk(File root) {

        File[] list = root.listFiles();

        for (File f : list) {
            if (f.isDirectory()) {
                Log.d("", "Dir: " + f.getAbsoluteFile());
                walk(f);
            }
            else {
                Log.d("", "File: " + f.getAbsoluteFile());
            }
        }
    }   
}

次のようにバックグラウンド スレッドから呼び出すことができます。

Filewalker fw = new Filewalker();
fw.walk(context.getFilesDir());
于 2012-07-14T08:50:52.490 に答える
0

System.out.println呼び出しは本当に遅いです(実際には関数自体ではなく、コンソールにテキストを書き込むのに多くの時間がかかる基礎となるPrintStreamです)。

それらを別のものに置き換えれば、問題ないはずです。たとえば、ファイル名を含む配列を作成して返すことができます。

于 2012-07-14T08:40:38.093 に答える