How to traverse a directory structure in Java

In this example, the program will traverse the given directory and print out all the directories and files absolute path and name one by one.

Example


package com.mkyong.io;

import java.io.File;

public class DisplayDirectoryAndFile{

	public static void main (String args[]) {

		displayIt(new File("C:\\Downloads"));
	}
	
	public static void displayIt(File node){
		
		System.out.println(node.getAbsoluteFile());
		
		if(node.isDirectory()){
			String[] subNote = node.list();
			for(String filename : subNote){
				displayIt(new File(node, filename));
			}
		}
		
	}
}

Output


C:\Downloads
C:\Downloads\100 Java Tips.pdf
C:\Downloads\1590599799.rar
C:\Downloads\2009
C:\Downloads\573440.flv
C:\Downloads\575492.flv
C:\Downloads\avira_antivir_personal_en.exe
C:\Downloads\backup-mkyong.com-12-24-2009.tar.gz
......

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

avatar
11 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
10 Comment authors
alexsushantRupeshnixArtvenkatesh Recent comment authors
newest oldest most voted
alex
Guest
alex

if (subNote != null) {
for (String filename : subNote) {<—– null exception
displayIt(new File(node, filename));
}
}

sushant
Guest
sushant

Thanks a lot

Rupesh
Guest
Rupesh

wow. this is pretty straight-forward. I panicked after seeing this question for the first time. Thanks MKYong.

nixArt
Guest
nixArt

Hi Mkyong,
your code threw a NullPointerException at least on Windows Vista if a File/Directory is a Symbolic Link
for example:
“C:UsersnixArtDocumentsMy Videos” ,which actually points on my HD to
“C:UsersnixArtVideos”

so now a new question arose: how would you detect & handle symbolic links here?

regardless, great work on your entire site!!!
– nik

venkatesh
Guest
venkatesh

hi,
i have the structure like below
src
packagename1
com.one.two
testpackage3
there are three package names in src like i listed above
i want to get the package names from src folder irrespective their structure.

Prashast
Guest
Prashast

Hey Mkyong,
you are great. Please help me with the following problem:
There are about 15 folders that I have. Every folder has a similar sub structure. I was to merge the contents of the folders:
1. taking 2 folders at a time
2. taking 3 folders at a time
Such that both files with same name are saved.

Example:
folder 1
—pqr
——abc.txt
——xyz.txt

folder 2
—pqr
——abc.txt

after merging:
folder 3
—pqr
——-abc.txt
——-abc.txt(2)
——-xyz.txt

please help me with a java code.

sanjay verma
Guest
sanjay verma

Dear Sir,

i have an application that reads files from folder. Files can be multiple.And another application continusily writes the files to that folder. I want to read files one by one. But my application only reads the latest file at one time i dnt want this plzzz help…

rgs,
sanjay

Coder
Guest
Coder

/* Code for comparing two folder structure for there differences */
package com.ex;

import java.io.File;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class JCompare {
static Set S1, S2;
static File f1 = new File(“C:\\Users\\ravi2307\\Downloads”);
static File f2 = new File(“C:\\Users\\ravi2307\\sdd”);

public static void main(String args[]) {
S1 = new HashSet();
S2 = new HashSet();
compare(f1, f2);
}

public static void compare(File f1, File f2) {
displayIt(f1, S1);
displayIt(f2, S2);
String temp = null;
System.out.println(“\n\n\n=============DIFFERENCES===============”);

Iterator itr = S2.iterator();
while (itr.hasNext()) {
temp = itr.next();
if (!S1.contains(temp)) {
System.out.println(“Folder1: “+temp);
}
}

Iterator itr1 = S1.iterator();
while (itr1.hasNext()) {
temp = itr1.next();
if (!S2.contains(temp)) {
System.out.println(“Folder2: “+temp);
}
}

}

public static void displayIt(File node, Set s1) {
if (node.getAbsoluteFile().toString()
.contains(f1.getAbsolutePath().toString()))
s1.add(node.getAbsoluteFile().toString()
.replace(f1.getAbsolutePath().toString(), “”));
else {
s1.add(node.getAbsoluteFile().toString()
.replace(f2.getAbsolutePath().toString(), “”));
}
System.out.println(node.getAbsoluteFile().toString());

if (node.isDirectory()) {
String[] subNote = node.list();
for (String filename : subNote) {
displayIt(new File(node, filename), s1);

}
}
}
}

trackback
Java to traverse all directories and find a file | Jisku.com

[…] code where i got from http://www.mkyong.com/java/how-to-traverse-a-directory-structure-in-java/, but we have to pass some directory as parameter. Is there a way to generalize to get all the […]

Jonathan Greene
Guest
Jonathan Greene

Awesome example MKYong… thanks for saving me some time! (^-^)

tsmc
Guest
tsmc

The following example shows printing directory hierarchy as a TREE just like DOS tree command.

http://bethecoder.com/applications/tutorials/showTutorials.action?tutorialId=Java_Core_General_FileMap

Good luck