Quiero recopilar una lista de todos los archivos en un directorio, en particular, incluidos los subdirectorios. Me gusta no hacer las cosas yo mismo, así que estoy usando FileUtils.listFiles
de Apache Commons IO. Así que tener algo como:Encontrar recursivamente solo directorios con FileUtils.listFiles
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);
}
}
}
El problema es que esto sólo parece encontrar archivos normales, no directorios:
$ mkdir -p foo/bar/baz; touch foo/one_file
$ java -classpath commons-io-1.4.jar:. TestListFiles
Found file: foo/one_file
ya estoy pasando TrueFileFilter
a ambos de los filtros, por lo que puede' Pienso en algo más inclusivo. Quiero que aparezca en la lista: "foo", "foo/one_file", "foo/bar", "foo/bar/baz"
(en cualquier orden).
También aceptaría soluciones que no sean FileUtils
, pero me parece una tontería tener que escribir mi propio BFS, o incluso reunir el conjunto de directorios principales de la lista que obtengo. (Eso echaría de menos los subdirectorios vacíos de todos modos.) Esto está en Linux, FWIW.
Gracias para el puntero: puedo terminar copiando eso y hacerlo funcionar. Supongo que esto es lo que obtengo al asumir que todo lo que es un archivo en Linux (directorios, enlaces, tuberías, dispositivos) es un archivo de la definición de Commons. –
Hubiera supuesto lo mismo que usted, hasta que no funcionó. Realmente deberían hacer su JavaDoc más explícito para dejarlo en claro. – Eddie
Guau, gracias por el puntero. No hay referencia en el javadoc de que los directorios estén excluidos. ¡No sé quién en la tierra asume que los directorios no son archivos! – WhyNotHugo