Programa Java para enumerar todos los archivos en un directorio y subdirectorios anidados

Requisitos previos: clase de archivo

Dado un directorio/carpeta principal, enumere todos los archivos de él y, si este directorio tiene otros subdirectorios anidados, enumere los archivos de ellos. Es bastante fácil observar un patrón de recurrencia simple en el problema anterior.

Algoritmo: 

  1. Cree un objeto de archivo para el directorio principal.
  2. Obtenga una array de archivos para el directorio principal.
  3. Si array[i] es un archivo:
    • Imprime el nombre del archivo.
  4. Si array[i] es un directorio:
    • Imprime el nombre del directorio.
    • Obtenga una array de archivos para el subdirectorio actual.
    • Repita los pasos 3 y 4 con el subdirectorio actual.
  5. Repita los pasos 3 y 4 con la siguiente array[i].

Ejemplo 1:

Java

// Java program to print all files
// in a folder(and sub-folders)
 
import java.io.File;
 
public class GFG {
    static void RecursivePrint(File[] arr, int index, int level)
    {
        // terminate condition
        if (index == arr.length)
            return;
 
        // tabs for internal levels
        for (int i = 0; i < level; i++)
            System.out.print("\t");
 
        // for files
        if (arr[index].isFile())
            System.out.println(arr[index].getName());
 
        // for sub-directories
        else if (arr[index].isDirectory()) {
            System.out.println("[" + arr[index].getName()
                               + "]");
 
            // recursion for sub-directories
            RecursivePrint(arr[index].listFiles(), 0,
                           level + 1);
        }
 
        // recursion for main directory
        RecursivePrint(arr, ++index, level);
    }
 
    // Driver Method
    public static void main(String[] args)
    {
        // Provide full path for directory(change
        // accordingly)
        String maindirpath
            = "C:\\Users\\Gaurav Miglani\\Desktop\\Test";
 
        // File object
        File maindir = new File(maindirpath);
 
        if (maindir.exists() && maindir.isDirectory()) {
             
              // array for files and sub-directories
            // of directory pointed by maindir
            File arr[] = maindir.listFiles();
 
            System.out.println(
                "**********************************************");
            System.out.println(
                "Files from main directory : " + maindir);
            System.out.println(
                "**********************************************");
 
            // Calling recursive method
            RecursivePrint(arr, 0, 0);
        }
    }
}

Producción: 

**********************************************
Files from main directory : C:\Users\Gaurav Miglani\Desktop\Test
**********************************************
Cormen.pdf
Extra-Items.pdf
XYZ.pdf
[Docs]
    A.docx
    B.doc
    C.docx
ABC.pdf
JKL.pdf
[sheets]
    XXX.csv
    YYY.csv
results.pdf
[Resumes]
    [Before2016]
        Resume2015.doc
        Resume2016.doc
        [Before2014]
            Resume2014.doc
    Resume2017.doc
    Resume2017.pdf
        QA.doc
Testing.pdf

Ejemplo 2: A continuación se muestra otro programa recursivo. Aquí usamos recursividad solo para subdirectorios anidados. Para los archivos del directorio principal, usamos foreach loop .

Java

// Recursive Java program to print all files
// in a folder(and sub-folders)
 
import java.io.File;
 
public class GFG {
    static void RecursivePrint(File[] arr, int level)
    {
        // for-each loop for main directory files
        for (File f : arr) {
            // tabs for internal levels
            for (int i = 0; i < level; i++)
                System.out.print("\t");
 
            if (f.isFile())
                System.out.println(f.getName());
 
            else if (f.isDirectory()) {
                System.out.println("[" + f.getName() + "]");
 
                // recursion for sub-directories
                RecursivePrint(f.listFiles(), level + 1);
            }
        }
    }
 
    // Driver Method
    public static void main(String[] args)
    {
        // Provide full path for directory(change
        // accordingly)
        String maindirpath
            = "C:\\Users\\Gaurav Miglani\\Desktop\\Test";
 
        // File object
        File maindir = new File(maindirpath);
 
        if (maindir.exists() && maindir.isDirectory()) {
            // array for files and sub-directories
            // of directory pointed by maindir
            File arr[] = maindir.listFiles();
 
            System.out.println(
                "**********************************************");
            System.out.println(
                "Files from main directory : " + maindir);
            System.out.println(
                "**********************************************");
 
            // Calling recursive method
            RecursivePrint(arr, 0);
        }
    }
}

Producción: 

**********************************************
Files from main directory : C:\Users\Gaurav Miglani\Desktop\Test
**********************************************
Cormen.pdf
Extra-Items.pdf
XYZ.pdf
[Docs]
    A.docx
    B.doc
    C.docx
ABC.pdf
JKL.pdf
[sheets]
    XXX.csv
    YYY.csv
results.pdf
[Resumes]
    [Before2016]
        Resume2015.doc
        Resume2016.doc
        [Before2014]
            Resume2014.doc
    Resume2017.doc
    Resume2017.pdf
        QA.doc
Testing.pdf

Ejemplo 3 –

A continuación se muestra otro programa iterativo para obtener todos los nombres de archivo utilizando Stack DS

Java

// Iterative Program to get all file names in Directory and
// SubDirectory
 
import java.io.*;
 
class GFG {
    public static void main(String[] args)
    {
        // provide complete path for directory(to be changed
        // accordingly)
        String mainDir = "c:\\GFG\\example";
        // File object
        File file = new File(mainDir);
        Stack<File> s = new Stack<>();
        s.push(file);
        // initially stack is not empty
        System.out.println("Content of Directory " + mainDir
                           + " is");
        while (!s.empty()) {
            File tmpF = s.pop();
            // check if it is a file or not
            if (tmpF.isFile()) {
                // print file name can code here according
                // to our need
                System.out.println(tmpF.getName());
            }
            else if (tmpF.isDirectory()) {
                // It's an directory hence list and push all
                // files in stack
                File[] f = tmpF.listFiles();
                for (File fpp : f) {
                    s.push(fpp);
                }
            } // else if ends here
        } // stack is not empty loop ends here
    } // main function ends here
}

Producción:

Content of Directory c:\GFG\example is
example.txt
testTwo.java
testTwo.class
test.java
test.class
test.java
eg1.java
eg1.class
test.java
test.class
Students.java
Students.class

NOTA: El código anterior no se compilará en el IDE en línea para compilarlo y ejecutarlo y descargarlo en su sistema local.

Este artículo es una contribución de Gaurav Miglani . Si te gusta GeeksforGeeks y te gustaría contribuir, puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *