Java Program to List all Files in a Directory and Nested Sub-Directories

26 Jan, 2022
Prerequisites: File class
Given a main directory/folder, list all the files from it, and if this directory has other nested sub-directories, list files from them. It is pretty easy to observe a simple recursion pattern in the above problem.
Algorithm : 
Create a File object for the main directory.Get an array of files for the main directory.If array[i] is a file:Print out the file name.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.Repeat the step 3 and 4 with next array[i].
Create a File object for the main directory.
Get an array of files for the main directory.
If array[i] is a file:Print out the file name.
Print out the file name.
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.
Print out directory name.
Get array of files for current sub-directory.
Repeat the step 3 and 4 with current sub-directory.
Repeat the step 3 and 4 with next array[i].
Example 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);        }    }}
  
Output: 
 
**********************************************
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
 
Example 2: Below is another recursive program. Here we use recursion only for nested sub-directories. For main directory files, we use 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);        }    }}
  
Output: 
 
**********************************************
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
Example 3 –
Below is another iterative program to get all file name using 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}
Output:
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
NOTE: The above code won’t compile on online IDE to compile and execute it download in your local system.
This article is contributed by Gaurav Miglani. If you like GeeksforGeeks and would like to contribute, you can write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect or you want to share more information about the topic discussed above.
 
nishkarshgandhi
harshsethi2000
java-file-handling
Java-I/O
Java-List-Programs
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Interfaces in Java
Queue Interface In Java
Multidimensional Arrays in Java
HashMap in Java with Examples
Math pow() method in Java with Example
PriorityQueue in Java
Stack Class in Java
List Interface in Java with Examples
Initialize an ArrayList in Java
ArrayList in Java