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 // 根据层级数得到 所组成的字符串 74 private static String getTab(int level) { 75 StringBuilder sb = new StringBuilder(); 76 for (int i = 0; i < level; i++) { 77 sb.append(" "); 78 } 79 return sb.toString(); 80 } 81 }