Pré-requisitos: Classe de arquivo

Dado um diretório / pasta principal, liste todos os arquivos dele e, se esse diretório tiver outros subdiretórios aninhados, liste os arquivos deles também.

É muito fácil observar um padrão de recursão simples no problema acima.

Algoritmo Recursivo:

1. Create File object for main directory.
2. Get array of files for main directory.
3. If array[i] is a file :
   -> Print out file name.
4. If array[i] is a directory :
   -> Print out directory name.
   -> Get array of files for current sub-directory.
   -> Repeat the step 3 and 4 with current sub-directory.

5. Repeat the step 3 and 4 with next array[i].
// 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 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); 
       } 
    }
}

Saída:

**********************************************
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

Abaixo está outro programa recursivo. Aqui, usamos recursão apenas para subdiretórios aninhados. Para os arquivos do diretório principal, usamos o loop foreach .

// 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); 
       } 
    }
}

Saída:

**********************************************
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

Este artigo é uma contribuição de Gaurav Miglani . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou enviar o seu artigo para contribute@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.