Programa Java para listar todos os arquivos em um diretório e subdiretórios aninhados | Abordagem recursiva
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.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva