javaandroidfile-ioandroid-anr-dialogdirectory-traversal

How to recursively scan directories in Android


How can I recursively scan directories in Android and display file name(s)? I'm trying to scan, but it's slow (force close or wait). I'm using the FileWalker class given in a separate answer to this question.


Solution

  • You should almost always access the file system only from a non-UI thread. Otherwise you risk blocking the UI thread for long periods and getting an ANR. Run the FileWalker in an AsyncTask's doInBackground().

    This is a slightly optimized version of 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());
                }
            }
        }
    }
    

    You can invoke it from a background thread like this:

    Filewalker fw = new Filewalker();
    fw.walk(context.getFilesDir());