Java中遍历一个文件夹下所有文件及目录的操作
2013-03-15 14:49
856 查看
第一种方法:
递归
package com.mm.digui; import java.io.File; import java.util.ArrayList; //递归 public class FileSystemDigui { private static ArrayList<File> filelist = new ArrayList<File>(); public static void main(String[] args) { /** * 方式:------采用递归 * 时间:-------75797 * 文件个数:--------47292 */ /** * 方式:------采用递归 * 时间:-------69344 * 文件个数:--------47292 */ long a = System.currentTimeMillis(); refreshFileList("J:"); System.out.println("方式:------采用递归"); System.out.println("时间:-------" + (System.currentTimeMillis() - a)); System.out.println("文件个数:--------" + filelist.size()); } public static void refreshFileList(String strPath) { File dir = new File(strPath); File[] files = dir.listFiles(); if (files == null) return; for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { filelist.add(files[i]); refreshFileList(files[i].getAbsolutePath()); } else { //String strFileName = files[i].getAbsolutePath().toLowerCase(); // System.out.println("---"+strFileName); filelist.add(files[i]); } } } }
第二种
循环
package com.mm.digui; import java.io.File; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class FileSystem { // 不用递归 public static void main(String[] args) { long a = System.currentTimeMillis(); List<File> filelisList = new ArrayList<File>(); /** * 方式:-----不采用递归 * 时间:------87188 * 文件个数:-----47292 */ /** * 方式:-----不采用递归 * 时间:------79781 * 文件个数:-----47292 */ LinkedList<File> list = new LinkedList<File>(); File dir = new File("J:"); File file[] = dir.listFiles(); for (int i = 0; i < file.length; i++) { if (file[i].isDirectory()) { list.add(file[i]); } else { // System.out.println(file[i].getAbsolutePath()); filelisList.add(file[i]); } } File tmp; while (!list.isEmpty()) { tmp = list.removeFirst(); if (tmp.isDirectory()) { file = tmp.listFiles(); if (file == null) continue; for (int i = 0; i < file.length; i++) { if (file[i].isDirectory()) { list.add(file[i]); } else { // System.out.println(file[i].getAbsolutePath()); filelisList.add(file[i]); } } // System.out.println(tmp.getAbsolutePath()); filelisList.add(tmp); } } System.out.println("方式:-----不采用递归"); System.out.println("时间:------" + (System.currentTimeMillis() - a)); System.out.println("文件个数:-----" + filelisList.size()); } }
经过测试当文件数很少时, 循环会略优于递归,差别不太大。 当文件很多时,递归优于循环
相关文章推荐
- 这是一个定时脚本,主要功能是遍历该文件夹下的所有文件并存储到数组,对数据中的文件进行操作,一个一个移动到指定的目录下,并删除原有文件
- JS如何遍历一个文件夹下的所有文件与目录
- JAVA遍历一个文件夹中的所有文件
- 递归的一些方法使用:深度遍历路径中的所有文件和目录,删除一个有文件的文件夹
- JS如何遍历一个文件夹下的所有文件与目录(转)
- 如何是获取一个文件夹里所有以.java结尾文件的数目,并把符合条件的文件名写到一个目录下。
- JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件
- Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
- java遍历一个文件夹下面的所有文件
- 用Java写一个递归遍历目录下面的所有文件。
- 遍历处理文件夹下所有.java文件代码左侧含有形如 /* 56 */注释的代码,并存到新的目录下
- JAVA遍历一个文件夹中的所有文件
- Java遍历一个目录下的所有文件
- java题-如何递归遍历一个文件夹下的所有文件
- 面试题-程序题-Java递归实现遍历文件目录(所有文件夹和子文件)
- JAVA遍历一个文件夹中的所有文件
- java遍历一个文件夹中的所有文件
- Java遍历一个目录下的所有文件
- Java遍历一个目录下的所有文件
- JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件