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