递归与非递归 遍历文件目录

递归遍历目录的缺点:遇到多层级目录时,层级越多,堆栈的负荷越大
import java.io.File;
import java.util.LinkedList;

/*
 * 采用非递归方式遍历目录及其子目录的文件  
 */
public class ProcessDirectory {
	public static int num;//文件总量
	
	public static void main(String[] args) {
		String path = "/Users/stone/Downloads/temp";
//		scanDirNoRecursion(path);
		
		scanDirRecursion(new File(path));
		System.out.println(path + "目录下共有文件数量为:" + num);
	}
	
	// 非递归
	public static void scanDirNoRecursion(String path) {
		LinkedList list = new LinkedList();
		File file = new File(path);
		if (file.isFile()) {
			System.out.println(file.getAbsolutePath());
			num++;
			return;
		}
		list.add(file);//是目录则添加进链表
		while (!list.isEmpty()) {//如果不为空
			File f = (File) list.removeFirst(); //先进先出 取出首个文件目录对象
			File[] listFiles = f.listFiles();
			if (listFiles == null) {
				return;
			}
			int len = listFiles.length;
			for (int i = 0; i < len; i++) {
				if (listFiles[i].isDirectory()) {
					list.add(listFiles[i]);
				} else {
					System.out.println(listFiles[i].getAbsolutePath());
					num++;
				}
			}
		}
		System.out.println(path + "目录下共有文件数量为:" + num);
	}
	
	//递归
	public static void scanDirRecursion(File file) {
		if (file.isFile()) {
			System.out.println(file.getAbsolutePath());
			num++;
			return;
		}
		File[] listFiles = file.listFiles();
		int len = listFiles.length;
		for (int i = 0; i < len; i++) {
			scanDirRecursion(listFiles[i]);
		}
	}
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值