从数据结构上面来看,目录是一种树状结构的,根目录是根结点,子目录是子结点,而文件则是叶,遍历目录即遍历树的所有结点和叶子了。对于树状结构的,比较好用的还是递归了。
1、 递归一个目录的三步骤:
①每次传递一个目录参数过来,就打印出这个目录路径
②通过ListFiles方法获取其所以子File对象,
③遍历所有File对象:当File对象映射目录时,递归调用本方法
否则,File对象就映射文件,打印文件路径
<span style="font-size:18px;">import java.io.*;
class FileDemo3 {
public static void main(String[] args) {
File f=new File("D:\\zsw");
showDir(f);
}
public static void showDir(File dir) {
System.out.println(dir);
File[] files = dir.listFiles();
for (File f : files) {
if (f.isDirectory()) {
showDir(f);
}
else {
System.out.println(f);
}
}
}
}</span>
结果是:
D:\zsw
D:\zsw\a.txt
D:\zsw\b
D:\zsw\a
D:\zsw\a\bDir
D:\zsw\a\bDir\新建文件夹
D:\zsw\a\m.txt
D:\zsw\c
D:\zsw\d.txt
2如果想在每一层子目录前面加上一些分隔符,让目录的层次结构更
加清晰,这需要如下的修改。比如打印成:
--zsw
--a.txt
--b
--a
--bDir
--新建文件夹
--m.txt
--c
--d.txt
import java.io.File;
public class FileDemo4 {
public static void main(String[] args) {
showDir2(new File("D:\\zsw"),0);
}
public static String levelStr(int level) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < level; i++) {
sb.append(" ");
}
return sb.toString();
}
/*
* ①打印每一层目录时,在前面加上相应的空格和"--"
* ②在将目录层次level++
* ③根据目录层次获得前缀字符串
*/
public static void showDir2(File dir, int level) {
System.out.println(levelStr(level) + "--" +
dir.getName());
level++;
File[] files = dir.listFiles();
for (File f : files) {
if (f.isDirectory()) {
showDir2(f, level);
} else {
System.out.println(levelStr(level) + "--" + f.getName());
}
}
}
}