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.
Advertisement
Answer
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());