1. 程式人生 > 其它 >統計一個資料夾中每種檔案的個數並列印

統計一個資料夾中每種檔案的個數並列印

案例需求
統計一個資料夾中每種檔案的個數並列印
列印格式如下:
txt:3個
doc:4個
jpg:6個


步驟:
1、建立一個File物件,封裝要統計的資料夾
2、建立一個Map<String,Integer>集合,鍵儲存字尾名,值儲存出現的個數
3、建立一個方法,接收File物件和Map集合
(1)通過listFiles方法獲取所有的檔案和子資料夾
(2)遍歷獲取每一個檔案或者子資料夾
(3)判斷,是否是一個檔案,如果是則獲取字尾名,進行統計
獲取檔名
根據檔名獲取字尾名
如果在Map集合中不包含這個字尾名的鍵,則說明第一次出現,將字尾名當做鍵,1當做值進行儲存
如果在Map集合中包含這個字尾名的鍵,則說明不是第一次出現,將字尾名名當做鍵,原來的個數+1當做值進行儲存
(4)判斷,是否是一個資料夾,如果是則遞迴呼叫
4、遍歷map txt:3個
*/
public class FileTest3 {
public static void main(String[] args) {
// 1、建立一個File物件,封裝要統計的資料夾
File dir = new File("E:\\temp");
// 2、建立一個Map<String,Integer>集合,鍵儲存字尾名,值儲存出現的個數
Map<String, Integer> map = new HashMap<>();
// 3、建立一個方法,接收File物件和Map集合,呼叫
getCountMap(dir, map);
// 4、遍歷map txt:3個
map.forEach((key, value) -> {
System.out.println(key + ":" + value + "個");
});
}

/*
建立一個方法,接收File物件和Map集合
*/
public static void getCountMap(File dir, Map<String, Integer> map) {
// (1)通過listFiles方法獲取所有的檔案和子資料夾
File[] files = dir.listFiles();
// (2)遍歷獲取每一個檔案或者子資料夾
for (File file : files) {
// (3)判斷,是否是一個檔案,如果是則獲取字尾名,進行統計
if (file.isFile()) {
// 獲取檔名 ,一律轉為小寫 防止字尾名有大寫的問題
String name = file.getName().toLowerCase();// java.txt
// 根據檔名獲取字尾名
String[] ss = name.split("\\.");
// 有後綴名,沒有後綴名的就過濾掉
if (ss.length >= 2) {
// 獲取到字尾名
String suffix = ss[ss.length-1];

// 如果在Map集合中不包含這個字尾名的鍵,則說明第一次出現,將字尾名當做鍵,1當做值進行儲存
// 如果在Map集合中包含這個字尾名的鍵,則說明不是第一次出現,將字尾名名當做鍵,原來的個數+1當做值進行儲存
if (!map.containsKey(suffix)) {
map.put(suffix,1);
} else {
map.put(suffix,map.get(suffix)+1);
}
}

} else {
// (4)判斷,是否是一個資料夾,如果是則遞迴呼叫
getCountMap(file,map);
}
}
}
}