Java中遍历一个文件夹下所有文件及目录的操作

本文通过实现两种方法遍历文件系统:递归与循环,对比了它们在处理不同数量文件时的性能差异。结果显示,当文件数量较少时,循环方法略优于递归;而当文件数量较多时,递归方法表现出更优的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种方法:


递归  


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

	}

}


经过测试当文件数很少时, 循环会略优于递归,差别不太大。  当文件很多时,递归优于循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值