在深度遍历目录时,当有目录就会去继续深度遍历该目录,当遍历完该子目录时,在接着刚才在该父目录的遍历继续遍历。主要涉及递归的思想。
package Filelist;
import java.io.File;
public class FileDeepList {
/**
* @param args
*/
public static void main(String[] args) {
File dir = new File("D:\\dir");
listFile(dir,0);
// deleteDir(dir);
}
public static void deleteDir(File dir) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
deleteDir(file);//递归删除
} else {
System.out.println(file + " : " + file.delete());//删除文件
}
}
System.out.println(dir + " : " + dir.delete());//当遍历完目录内的文件和子目录时。将该目录页删除掉。
}
/**
* 通过传入级数leave参数调用getSpace()函数来使目录层次有缩进效果。
* @param dir
* @param leave
*/
public static void listFile(File dir, int leave) {
// System.out.println("目录: "+dir.getAbsolutePath());
System.out.println(getSpace(leave) + "目录: " + dir.getName());//在遍历目录时先输出目录名称。
File[] files = dir.listFiles();
leave++;
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
listFile(files[i], leave);//对目录下的目录进行进行递归调用函数自身
else
// System.out.println("文件: "+files[i].getAbsolutePath());
System.out.println(getSpace(leave) + "文件: " + files[i].getName());//打印文件
}
}
private static String getSpace(int leave) {
StringBuilder sb = new StringBuilder();
sb.append("|--");
for (int i = 0; i < leave; i++) {
sb.insert(0, "| ");
}
return sb.toString();
}
}