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 }

运行结果:

 

 

 

 

 

posted on 2017-03-15 17:29  ruby_6  阅读(313)  评论(0)    收藏  举报

导航