管理系のアプリなんか作る人は使うかもしれませんが
内部やSD内のFileを検索するときに再帰処理で行う事があると思います。
んでも、再帰処理のやりすぎはStackOverFlowExceptionで落ちる場合があるのね。。。


よくstackoverflowとかであがっている情報なんかでは大体以下な感じで処理するかと。
 List<File> hitFiles = getFiles(new File("検索したいフォルダパス"));

 -----
 private List<File> getFiles(File parentDir) {
    ArrayList<File> in = new ArrayList<File>();
    
    //parentDirのファイルリストを取得して回す
    for (File file :  parentDir.listFiles()) {
        if (file.isDirectory()) {
        //Directoryなら再帰してDirectoryのファイルを取得
            in.addAll(getFiles(file));
        } else {
            if("フィルターしたい内容")){
                in.add(file);
            }
        }
    }
    return in;
}


問題ないんですけど端末と検索数によっては再帰やりすぎでStackOverFlowExceptionおきる。。
*最近の端末だとスタックが増えたのであんまし起こらないから、検証時に起こらなかったりする場合もあるみたい。

androidはroot以下のファイルを一度に呼び出すメソッドもなければ、サーチ系もうむむって感じ。。。
なので代替えするとなるとーって感じで探したというか戻ったというかしました。

org.apache.commons.io.FileUtilsを使えばいんじゃないかなと言う結論に。
使い方の例 
Collection<File> files = FileUtils.listFiles(
DataController.getInternalApkBackUpDataFile(context),
new RegexFileFilter("フィルター内容"), TrueFileFilter.TRUE);
for (File f : files) {
Log.e("FileName", f.getName());
}

普通に再帰するよりシンプルでござります。
いままでがりがり書いてたのがアホみたいな感じに。。。