01_輸出資料夾下的檔案型別和個數
阿新 • • 發佈:2021-07-19
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); } } } } }