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:
- Cree un objeto de archivo para el directorio principal.
- Obtenga una array de archivos para el directorio principal.
- Si array[i] es un archivo:
- Imprime el nombre del archivo.
- 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.
- 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