統計該文件夾(包含子文件夾)中,每種類型的文件及個數

package 作業09;

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

public class Test00 {
	/*
	 * 分析以下需求,並用代碼實現 鍵盤錄入一個文件夾路徑,統計該文件夾(包含子文件夾)中,每種類型的文件及個數
	 * 注意:用文件類型(後綴名,不包含.,"java","txt")作爲key,用個數作爲value,放入到map集合中,
	 * 並按照如下格式打印map集合中的內容
	 * 
	 * docx類型的文件有 1 個 java類型的文件有 24 個 txt類型的文件有 10 個 //...
	 */
	public static void main(String[] args) {
		System.out.println("輸入一個文件路徑:");
		Scanner sc = new Scanner(System.in);
		String Dir = sc.nextLine();
		File f = new File(Dir);

		// 新建一個Map集合
		Map<String, Integer> map = new HashMap<String, Integer>();
		getFileTypeCount(f, map);
		
		//遍歷map
		Set<Entry<String, Integer>> entrySet = map.entrySet();
		for (Entry<String, Integer> entry : entrySet) {
			String key = entry.getKey();
			Integer value = entry.getValue();
			System.out.println(key+" = "+value);
		}
	}

	public static void getFileTypeCount(File dir, Map<String, Integer> map) {
		// 獲取dir目錄下的所有文件和文件夾
		File[] files = dir.listFiles();

		// 遍歷對象數組
		for (File file : files) {
			if (file.isFile()) {
				int index = file.getName().lastIndexOf(".");
				String str = file.getName().substring(index + 1);
				map.put(str, map.get(str) == null ? 1 : map.get(str) + 1);
			} else if (file.isDirectory()) {
				getFileTypeCount(file, map);
			}
		}
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章