非递归方式
public static void noRecursion(File dir){ int fileNum=0,folderNum=0; LinkedList<File> list=new LinkedList<File>(); if(dir.exists()){ if (null==dir.listFiles()){ return; } list.addAll(Arrays.asList(dir.listFiles())); while(!list.isEmpty()){ File[] files = list.removeFirst().listFiles(); if(null==files){ continue; } for (File f:files) { if (f.isDirectory()) { System.out.println("文件夹:" + f.getAbsolutePath()); list.add(f); folderNum++; } else { System.out.println("文件:" + f.getAbsolutePath()); fileNum++; } } } }else{ System.out.println("文件不存在!"); } System.out.println("文件夹数量:" + folderNum + ",文件数量:" + fileNum); }
递归方式
public static void showDir(File dir) { if(dir.exists()){ //抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。 File[] files = dir.listFiles(); if(null!=files){ for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { showDir(files[i]); } else { System.out.println(files[i]); } } } }else{ System.out.println("文件不存在!"); } }
性能比较
public static void main(String[] args) { System.out.println("------------------------------------------递归开始--------------------------------------------------------"); long start = System.currentTimeMillis(); showDir(new File("D:\IDEAProject\helloMi")); long end = System.currentTimeMillis(); long num1=end-start; System.out.println("---------------------递归结束-----------------------"); System.out.println("-------------------- 非递归开始----------------------"); start=System.currentTimeMillis(); noRecursion(new File("D:\IDEAProject\helloMi")); end=System.currentTimeMillis(); System.out.println("---------------------非递归结束----------------------"); long num2=end-start; System.out.println("-------------------------递归用时:"+num1); System.out.println("-------------------------非递归用时:"+num2); } 结果: -------------------------递归用时:18 -------------------------非递归用时:20