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 }