Java program to List all files in a directory and nested sub-directories

Course Curriculum

Java program to List all files in a directory and nested sub-directories

Java program to List all files in a directory and nested sub-directories

Given a main directory/folder, list all the files from it and if this directory have other nested sub-directories, list files from them also.

It is quite easy to observe simple recursion pattern in above problem.

Recursive Algorithm :

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 maindirectoryPath = "C:UsersprutorDesktopTest";

// File object
File maindir = new File(maindirectoryPath);

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:UsersprutorDesktopTest
**********************************************
Cormen.pdf
Extra-Items.pdf
test.pdf
[Docs]
doc1.docx
doc2.doc
doc3.docx
ABC.pdf
JKL.pdf
[sheets]
XXX.csv
YYY.csv
results.pdf
[Resumes]
[Before2016]
cv2012.doc
cv2021.doc
[Before2014]
cv2014.doc
cv2020.doc
cv2020.pdf
QA.doc
Testing.pdf

Below is another recursive program. Here we use recursion only for nested sub-directories. For main directory files, we use foreach loop.

// 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 maindirectoryPath = "C:UsersprutorDesktopTest";

// File object
File maindir = new File(maindirectoryPath);

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:UsersprutorDesktopTest
**********************************************
Cormen.pdf
Extra-Items.pdf
test.pdf
[Docs]
doc1.docx
doc2.doc
doc3.docx
ABC.pdf
JKL.pdf
[sheets]
XXX.csv
YYY.csv
results.pdf
[Resumes]
[Before2016]
cv2016.doc
cv2015.doc
[Before2014]
cv2014.doc
cv2020.doc
cv2020.pdf
QA.doc
Testing.pdf

(Next Lesson) How to start learning Java