键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:java txt)作为key, 用个数作为value,放入到map

题目:

键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,用个数作为value,放入到map集合中,并用两种方式遍历map集合
    例如:
    doc 的类型的文件有  3 个
    java 的类型的文件有  5 个
    txt 的类型的文件有  7 个

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

public class ExsFileCount {

	public static void main(String[] args) {
		// 对地址进行了转换,用户直接粘贴windows中的路径即可
		System.out.println("请输入windows中路径");
		String in = new Scanner(System.in).next();
		File file = new File(trans(in));    // file为目标路径
		HashMap<String, Integer> map = new HashMap();
		fileCount(map, file);
		showMap(map);
	}

	// 本方法用于统计指定路径下的文件个数,并将结果传入map
	private static void fileCount(HashMap<String, Integer> map, File file) {
		File[] fArr = file.listFiles();
		for (File f : fArr) {
			if (f.isDirectory()) {
				fileCount(map, f);
			} else {
				String name = f.getName().toLowerCase();
				// 先对无格式的文件进行计数(文件名中无点)
				if (name.indexOf('.') == -1) {
					if (!map.containsKey("Others")) {
						map.put("Others", 1);
					} else {
						int oc = map.get("Others") + 1;
						map.put("Others", oc);
					}
				}
				// 对有格式的文件进行计数
				int index = name.lastIndexOf(".");
				String type = name.substring(index + 1);
				if (!map.containsKey(type)) {
					map.put(type, 1);
				} else {
					int c = map.get(type) + 1;
					map.put(type, c);
				}
			}
		}
	}

	// 本方法用于遍历map
	private static void showMap(HashMap<String, Integer> map) {
		Set<String> keyset = map.keySet();
		for (String key : keyset) {
			System.out.println(key + "  的类型的文件有    " + map.get(key) + "个");
		}

	}

	// 本方法用于将windows格式路径转换为java认可的路径格式
	private static String trans(String in) {
		StringBuffer sbIn = new StringBuffer();
		char[] cArr = in.toCharArray();
		for (char c : cArr) {
			sbIn.append(c);
			if ('\\' == c)
				sbIn.append("\\");
		}
		return sbIn.toString();
	}
}

猜你喜欢

转载自blog.csdn.net/hssykey/article/details/81088582