01_输出文件夹下的文件类型和个数

package Test;

import java.io.File;
import java.util.HashMap;
import java.util.Set;

/*分析以下需求,并用代码实现
键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中,每种类型的文件及个数,

注意:用文件类型(后缀名,不包含.,"java","txt")作为key,用个数作为value,放入到map集合中,并按照如下格式打印map集合中的内容

	docx类型的文件有  1 个
	java类型的文件有  24 个
	txt类型的文件有  10 个*/
/**
 * 统计指定文件夹下的文件类型及数量
 * @author  mingming
 * @version v1.0
 */
public class Test10 {
	//定义静态变量hm,存放文件类型和数量
	public static HashMap<String, Integer> hm = new HashMap<>();
	
	public static void main(String[] args) {
		//调用获取文件类型和数量的方法,把文件类型和数量存入集合
		getFileType("G:\\JavaSE49\\day01");
		//遍历集合,打印出指定目录的所有文件类型和数量
		print(hm);

	}

	private static void print(HashMap<String, Integer> hm) {
		//遍历集合
		Set<String> set=hm.keySet();
		for (String key : set) {
			int value=hm.get(key);
			System.out.println(key+"类型的文件有"+value+"个");
			
		}
	}
	/**
	 * 获取指定文件下的文件类型和数量
	 * @param path 磁盘路径
	 */
	private static void getFileType(String path) {
		File file = new File(path);
		//判断path路径是否存在
		if(!file.exists()){
			return;
		}
		//获取path路径下的文件列表
		File[] files = file.listFiles();
		for (File fileTemp : files) {
			// 如果当前File是文件夹
			if (fileTemp.isDirectory()) {
				String pathName=fileTemp.getAbsolutePath();
				getFileType(pathName);
			}else{
				//如果当前File是文件
				//获取到文件的后缀名
				String endName=fileTemp.getName().substring(fileTemp.getName().lastIndexOf(".")+1);
				Integer num=hm.get(endName);
				if(num==null){
					//集合中不包含这个键
					hm.put(endName, 1);
					
				}else{
					//集合中已经包含这样一个键(如java)
					hm.put(endName,num+1);
				
				}
			}
		}
		
	}
}

posted @ 2021-07-18 21:44  我是多多  阅读(159)  评论(0)    收藏  举报