首页 > 代码库 > 递归输出 树状 目录

递归输出 树状 目录

 

 1 import java.io.File;
 2 import java.util.ArrayList;
 3 import java.util.List;
 4 
 5 public class IteratorDirDemo {
 6 
 7     public static void main(String[] args) {
 8         IteratorUtil.IteratorDir(new File("f:\\KuGou"));
 9     }
10 
11 }
12 
13 class IteratorUtil {
14     private static int level = 0;// 保存层级数
15 
16     public static void IteratorDir(File file) {
17         if (file != null) {
18             // 找出递归的出口
19             if (file.isFile() || file.list().length == 0) {
20                 return;
21             } else {
22 
23                 File[] files = file.listFiles();
24                 //线文件夹后文件排序
25                 files = sort(files);
26                 for (File f : files) {
27                     // 动态字符串
28                     StringBuilder sb = new StringBuilder();
29                     if (f.isFile()) {
30                         sb.append(getTab(level));
31                         sb.append(f.getName());
32                     } else {
33                         sb.append(getTab(level));
34                         sb.append(f.getName());
35                         sb.append("\\");
36                     }
37                     System.out.println(sb.toString());
38                     if (f.isDirectory()) {
39                         level++;// 进入目录遍历层级加一
40                         IteratorDir(f);// 递归调用遍历
41                         level--;// 退出目录 level减一
42                     }
43 
44                 }
45             }
46 
47         }
48     }
49 
50     /**
51      * 对file类型数组进行先文件夹后文件排序
52      * 
53      * @param files
54      * @return
55      */
56     private static File[] sort(File[] files) {
57         List<File> list = new ArrayList<File>();
58         // 先存放文件夹后存放文件
59         for (File f :files) {
60             if (f.isDirectory()) {
61                 list.add(f);
62             }
63         }
64         for (File f : files) {
65             if (f.isFile()) {
66                 list.add(f);
67             }
68         }
69         return list.toArray(new File[list.size()]);
70 
71     }
72 
73     // 根据层级数得到\t所组成的字符串
74     private static String getTab(int level) {
75         StringBuilder sb = new StringBuilder();
76         for (int i = 0; i < level; i++) {
77             sb.append("\t");
78         }
79         return sb.toString();
80     }
81 }

 

递归输出 树状 目录