java遍历一个目录并打印目录结构
使用递归方式,遍历文件夹下所有目录和文件,并按照层级打印。参考了网上一些博文的思路,加上了自己小小的改动,主要是分层级打印部分,建了一个包装类LevelFile。
1 package com.file; 2 3 import java.io.File; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 LevelFile levelFile = new LevelFile();//装饰器模式!! 9 levelFile.setLevel(0); 10 levelFile.setFile(new File("D:\\tools\\apache-maven-3.3.9")); 11 traverse(levelFile); 12 } 13 14 /** 15 * 根据给定文件夹路径path,遍历打印出所有子目录和文件信息 16 * @param path 17 */ 18 public static void traverse(LevelFile levelFile) { 19 20 File file = levelFile.getFile(); 21 if (file.exists()) { 22 //此方法列出当前目录下所有儿子(文件夹/文件) 23 File[] files = file.listFiles(); 24 if (null!=files && files.length> 0) { 25 for (File subFile : files) {//循环每一个儿子(文件夹/文件) 26 LevelFile f = new LevelFile(); 27 f.setFile(subFile); 28 f.setLevel(levelFile.getLevel()+1);//所有儿子目录和文件的level是在父亲文件夹的level上加1 29 printFileInfo(f);// 打印目录或者文件名 30 if (subFile.isDirectory()) {//判断,如果这个儿子是目录类型 31 traverse(f);//此处递归该目录 32 } 33 } 34 } 35 } 36 } 37 /** 38 * 根据不同level 对文件名或者目录名 打印 39 * @param f 40 */ 41 public static void printFileInfo(LevelFile f){ 42 for(int i=0;i<f.getLevel();i++){ 43 System.out.print("\t"); 44 } 45 System.out.println("--"+f.getFile().getName()); 46 } 47 }
1 package com.file; 2 3 import java.io.File; 4 5 public class LevelFile { 6 //文件/目录对应的Level层级,控制打印格式 7 private int level; 8 //原始文件对象 9 private File file; 10 public int getLevel() { 11 return level; 12 } 13 public void setLevel(int level) { 14 this.level = level; 15 } 16 public File getFile() { 17 return file; 18 } 19 public void setFile(File file) { 20 this.file = file; 21 } 22 23 24 }
运行结果:

浙公网安备 33010602011771号