您的位置:首页 > 编程语言 > Java开发

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());

	}

}


经过测试当文件数很少时, 循环会略优于递归,差别不太大。 当文件很多时,递归优于循环
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐