键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数

//javaSE的复习中偶然遇到这个IO流问题,做一次发现还有许多的不足
//总结如下:①递归调用问题
				第一次把Set集合放在调用函数中,每次递归调就会创建一个新的Set对象,导致无法存储文件后缀对象
		      ②集合问题
				在迭代器中两个集合比较,会出现异常
package ceShi;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class file {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要查询的文件夹:");
		String url = sc.next();
		String Url = url.replace("\\","\\\\");
		File file = new File(Url);
		Set<String> set = new HashSet<String>();
		List<String> list = new ArrayList<String>();
		List<String> list1 = new ArrayList<String>();
		Map<String,Integer> map =new HashMap<String,Integer>();
		function(file,set,list);
		System.out.println(set.toString());
		System.out.println(list.toString());
		list1.addAll(set);
		System.out.println(list1);
		//Iterator it = list1.iterator();
		for(int j = 0;j<list1.size();j++){
			int value =0;
			System.out.println(list1.get(j));
		for(int i = 0; i<list.size();i++){
			if(list.get(i).equals(list1.get(j))){
				value++;
			}
			}
		map.put((String) list1.get(j), value);
		}
		Iterator it = list1.iterator();
		while(it.hasNext()){
			String key = (String) it.next();
			Integer value = map.get(key);
			System.out.println("在文件"+url+"中"+key+"类型文件有"+value+"个");
		}
	}

	private static void function(File file,Set set,List list) {
		
		// TODO Auto-generated method stub
	
		File[] fileArr =file.listFiles();
		for(File f:fileArr){
			if(f.isDirectory()){
			
				function(f,set,list);
			}else{
				typeOf(f.toString());
				set.add(leiXing(f.toString()));
				list.add(leiXing(f.toString()));
			}
		}
		
	
	}
	//文件类型函数,获取文件后缀
	private static String typeOf(String str){
	return	str.substring(str.lastIndexOf(".")+1,str.length());	
	}
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值