En Java, ¿cómo puedo enumerar solo los subdirectorios de un directorio?
Me gustaría usar la funcionalidad java.io.File, ¿cuál es el mejor método en Java para hacer esto?
Puede utilizar la clase File para enumerar los directorios.
File file = new File("/path/to/directory");
String[] directories = file.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
return new File(current, name).isDirectory();
}
});
System.out.println(Arrays.toString(directories));
Actualizar
El comentario del autor en esta publicación quería una manera más rápida, gran discusión aquí: ¿Cómo recuperar una lista de directorios RÁPIDAMENTE en Java?
Básicamente:
Una solución Java 8 muy simple:
Es equivalente a usar un FileFilter (también funciona con Java antiguo):
fuente
::
en este caso?@Mohamed Mansour casi estabas allí ... el argumento "dir" que estabas usando es en realidad la ruta actual, por lo que siempre volverá verdadero. Para ver si el niño es un subdirectorio o no, necesita probar ese niño.
fuente
En caso de que esté interesado en una solución que utilice Java 7 y NIO.2, podría ser así:
fuente
fuente
Para aquellos que también estén interesados en Java 7 y NIO, existe una solución alternativa a la respuesta de @ voo anterior . Podemos usar un try-with-resources que llama
Files.find()
y una función lambda que se usa para filtrar los directorios.Incluso podemos filtrar directorios por nombre cambiando la función lambda:
o por fecha:
fuente
En 2012 (fecha de la pregunta) sí, hoy no.
java.nio
La API debe ser favorecida para tales requisitos.Terrible con tantas respuestas, pero no de la forma simple en que lo usaría
Files.walk().filter().collect()
.A nivel mundial, son posibles dos enfoques:
1)
Files.walk(Path start, )
no tienemaxDepth
limitaciones mientras2)
Files.walk(Path start, int maxDepth, FileVisitOption... options)
permite configurarlo.Sin especificar ninguna limitación de profundidad, daría:
Y si por razones heredadas, necesita obtener una lista
File
, puede agregar unamap(Path::toFile)
operación antes de la recopilación:fuente
Files.list(Path)
que probablemente sea el mismo queFiles.walk(Path,1)
.Files.list(Path)
es una alternativa justa si no queremos iterar carpetas de forma recursiva. Para iterar carpetas de forma recursiva,walk()
encaja mejor.La solución que funcionó para mí, falta en la lista de respuestas. Por lo tanto, estoy publicando esta solución aquí:
Aquí he usado
org.apache.commons.io.filefilter.FileFilterUtils
de Apache commons-io-2.2.jar. Su documentación está disponible aquí: https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/filefilter/FileFilterUtils.htmlfuente
Dado un directorio inicial como
String
String
ruta como parámetro. En el método:listFiles
métodofuente
Aquí está la solución para mi código. Acabo de hacer un pequeño cambio desde la primera respuesta . Esto enumerará todas las carpetas solo en el directorio deseado línea por línea:
fuente