¿Cómo puedo obtener una lista recursivamente de todos los archivos dentro de una carpeta en Java?¿Cómo escanear una carpeta en Java?
Respuesta
No estoy seguro de cómo se desea representar el árbol? De todos modos, aquí hay un ejemplo que escanea todo el subárbol utilizando la recursión. Los archivos y directorios son tratados por igual. Tenga en cuenta que File.listFiles() devuelve nulo para no directorios.
public static void main(String[] args) {
Collection<File> all = new ArrayList<File>();
addTree(new File("."), all);
System.out.println(all);
}
static void addTree(File file, Collection<File> all) {
File[] children = file.listFiles();
if (children != null) {
for (File child : children) {
all.add(child);
addTree(child, all);
}
}
}
Java 7 ofrece un par de mejoras. Por ejemplo, DirectoryStream proporciona un resultado a la vez: la persona que llama ya no tiene que esperar a que se completen todas las operaciones de E/S antes de actuar. Esto permite actualizaciones incrementales GUI, cancelación anticipada, etc.
static void addTree(Path directory, Collection<Path> all)
throws IOException {
try (DirectoryStream<Path> ds = Files.newDirectoryStream(directory)) {
for (Path child : ds) {
all.add(child);
if (Files.isDirectory(child)) {
addTree(child, all);
}
}
}
}
en cuenta que el valor de retorno nula temido ha sido sustituido por IOException.
Java 7 también ofrece una tree walker:
static void addTree(Path directory, final Collection<Path> all)
throws IOException {
Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
all.add(file);
return FileVisitResult.CONTINUE;
}
});
}
No recuerdo cuántas veces escribí este código. :-P – marcospereira
Sí, es como una pesadilla recurrente ..: P ~ – volley
Tengo que aceptar esta respuesta ya que pedí el árbol (había aceptado la respuesta de Oscar Reyes primero) ... aunque agregué una línea más para la recursión no fue tan difícil :) – Lipis
import java.io.File;
public class Test {
public static void main(String [] args) {
File actual = new File(".");
for(File f : actual.listFiles()){
System.out.println(f.getName());
}
}
}
Muestra indistintamente archivos y carpetas.
Consulte los métodos de la clase de archivos para ordenarlos o evitar directorio de impresión, etc.
Salida Apache Commons FileUtils (listFiles, iterateFiles, etc.). Buenos métodos de conveniencia para hacer lo que quiere y también aplicar filtros.
http://commons.apache.org/io/api-1.4/org/apache/commons/io/FileUtils.html
En JDK7, "más NIO características" debe tener métodos para aplicar el patrón de visitante sobre un árbol de archivos o simplemente el contenido inmediato de un directorio - no es necesario encuentre todos los archivos en un directorio potencialmente enorme antes de iterar sobre ellos.
pero ¿es NIO más rápido? – Pacerier
@Pacerier Para directorios pequeños no debería hacer mucha diferencia.Ahora estoy menos familiarizado con la implementación que hace nueve años, pero la transmisión de NIO debería ser mejor para manejar directorios * masivos * que para leer todo de una vez. Habiendo dicho eso, la memoria ahora será varias docenas de veces más barata. –
También puede usar la interfaz FileFilter
para filtrar lo que desee. Se utiliza mejor cuando se crea una clase anónima que lo implementa:
import java.io.File;
import java.io.FileFilter;
public class ListFiles {
public File[] findDirectories(File root) {
return root.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.isDirectory();
}});
}
public File[] findFiles(File root) {
return root.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.isFile();
}});
}
}
visualizar la estructura de árbol era la forma más conveniente para mí:
public static void main(String[] args) throws IOException {
printTree(0, new File("START/FROM/DIR"));
}
static void printTree(int depth, File file) throws IOException {
StringBuilder indent = new StringBuilder();
String name = file.getName();
for (int i = 0; i < depth; i++) {
indent.append(".");
}
//Pretty print for directories
if (file.isDirectory()) {
System.out.println(indent.toString() + "|");
if(isPrintName(name)){
System.out.println(indent.toString() + "*" + file.getName() + "*");
}
}
//Print file name
else if(isPrintName(name)) {
System.out.println(indent.toString() + file.getName());
}
//Recurse children
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++){
printTree(depth + 4, files[i]);
}
}
}
//Exclude some file names
static boolean isPrintName(String name){
if (name.charAt(0) == '.') {
return false;
}
if (name.contains("svn")) {
return false;
}
//.
//. Some more exclusions
//.
return true;
}
public static void directory (File dir) {
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file.getAbsolutePath());
if (file.listFiles() != null)
directory(file);
}
}
Aquí DIR es el directorio que va a escanear . p. ej. c: \
- 1. en Java, ¿cómo lograr escanear puertos UDP?
- 2. ¿Cómo crear una carpeta en Java?
- 3. ¿Cómo crear una carpeta vacía en java?
- 4. Cómo escanear texto para la expresión regular en Java
- 5. Cómo escanear un archivo con antivirus al cargarlo en Java?
- 6. Cómo hacer una carpeta oculta usando java
- 7. Cómo escanear un puerto esperando una conexión en una red
- 8. Cómo escanear en/a una aplicación de Weba
- 9. ¿Cómo crear un archivo en Java (no en una carpeta)?
- 10. encontrar archivos en una carpeta usando Java
- 11. C# escanear una carpeta y abrir archivos que se crearon después de cierto tiempo
- 12. ¿cómo puedo crear una carpeta temporal en java 6?
- 13. ¿Cómo escanear puertos COM en C#?
- 14. Obteniendo el número de archivos en una carpeta en java
- 15. Cómo desinstalo una carpeta
- 16. eliminando carpeta de java
- 17. Cómo escanear filas de HBase eficientemente
- 18. Java ZIP - ¿cómo descomprimir la carpeta?
- 19. ¿Cómo abrir una carpeta?
- 20. ¿Hay una mejor herramienta para escanear y escanear HTML que CGI para Ruby?
- 21. Cómo escanear XML con Apache Velocity?
- 22. ESCANEAR en el atributo clave en DynamoDB
- 23. ¿Cómo agregar otra carpeta fuente de prueba a Maven y compilarla en una carpeta separada?
- 24. ¿Cómo crear automáticamente una carpeta faltante?
- 25. ¿Cómo escanear archivos realmente grandes en el disco?
- 26. ¿Cómo subir una carpeta con PHP?
- 27. Cómo acceder a un subarchivo/carpeta en Java 7 java.nio.file.Path?
- 28. Sincronizar sin escanear archivos individuales?
- 29. ¿Cómo seleccionar una carpeta en android?
- 30. ¿Cómo eliminar una carpeta en C++?
¿A qué te refieres con TREE? por favor, reformule su pregunta si está buscando un método para LISTA de todos los archivos dentro de una carpeta (recursivamente). –
@ PeterPerháč esta pregunta tiene 4 años .. :) gracias – Lipis