De manière récursive trouver uniquement les répertoires avec FileUtils.listFiles

Je veux rassembler une liste de tous fichiers dans un répertoire, en particulier, y compris les sous-répertoires. Je n'aime pas faire les choses moi-même, donc je suis en utilisant FileUtils.listFiles de Apache Commons IO. J'ai donc quelque chose comme:

import java.io.File;
import java.util.Collection;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;

public class TestListFiles {
  public static void main(String[] args) {
    Collection<File> found = FileUtils.listFiles(new File("foo"),
        TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    for (File f : found) {
      System.out.println("Found file: " + f);
    }
  }
}

Problème est que cela ne semble trouver normal les fichiers, pas les répertoires:

$ mkdir -p foo/bar/baz; touch foo/one_file
$ java -classpath commons-io-1.4.jar:. TestListFiles
Found file: foo/one_file

Je suis déjà passer TrueFileFilter pour les deux filtres, donc je ne peux pas penser à quelque chose de plus inclusive. Je veux la liste: "foo", "foo/one_file", "foo/bar", "foo/bar/baz" (dans n'importe quel ordre).

Je accepter non-FileUtils des solutions, mais il semble ridicule d'avoir à écrire mon propre BFS, ou même de recueillir l'ensemble des répertoires parents à partir de la liste je ne l'obtenir. (Ce serait manquer sous-répertoires vides de toute façon.) C'est sur Linux, FWIW.

InformationsquelleAutor Dave B | 2009-05-23