1. 程式人生 > 其它 >01_輸出資料夾下的檔案型別和個數

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