比較不同目錄資料夾下同名檔案的數量和顯示同名檔名
阿新 • • 發佈:2019-02-19
大概思路:1、得到檔案目錄和目錄下的檔案,並把檔案儲存在list集合中
2、使用map集合把檔名存在key中,value值存檔案對應的路徑
3、把一個資料夾下和另一個檔案下同名的檔案移除
4、使用強for語句遍歷map
有優化方法還請大家多多指教。
package file.compare; import java.io.File; import java.io.FileFilter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; public class CompareFileName { public static void main(String[] args) { // 過濾字尾名的物件 FileFilter filterByFile = (FileFilter) new FilterByFile(""); // 路徑下的檔案物件 File dirA = new File("C:\\Users\\Administrator\\Desktop\\新建資料夾\\"); File dirB = new File("C:\\Users\\Administrator\\Desktop\\OprObject\\"); // 儲存檔案的list物件 List<File> listA = new ArrayList<File>(); List<File> listB = new ArrayList<File>(); // 呼叫相應方法,新增檔案到集合 listA = getFileList(dirA, listA, filterByFile); listB = getFileList(dirB, listB, filterByFile); // 只儲存檔名和檔案路徑的map物件 Map<String, String> mapA = new HashMap<String, String>(); Map<String, String> mapB = new HashMap<String, String>(); for (File file : listA) { mapA.put(file.getName(), file.getPath()); } for (File file : listB) { mapB.put(file.getName(), file.getPath()); } System.out.println("輸入A或者B,輸入A表示顯示A資料夾中獨有的內容B亦然"); Scanner str = new Scanner(System.in); if ("A".equals(str.nextLine())) { mapA.keySet().removeAll(mapB.keySet());// 移除檔名及字尾相同的檔案 System.out.println("A資料夾有而B資料夾沒有的檔案:"); int count = 0; for (Entry<String, String> entry : mapA.entrySet()) { System.out.println(entry.getKey()); count++; } System.out.println("不相同的檔案個數:" + count); } else { mapB.keySet().removeAll(mapA.keySet());// 移除檔名及字尾相同的檔案 System.out.println("B資料夾有而A資料夾沒有的檔案:"); int countA = 0; for (Entry<String, String> entry : mapB.entrySet()) { System.out.println(entry.getKey()); countA++; } System.out.println("不相同的檔案個數:" + countA); } } private static List<File> getFileList(File dir, List<File> list, FileFilter filterByFile) { // 遍歷路徑下的所有檔案 File[] files = dir.listFiles(); for (File file : files) { if (file.isDirectory()) { getFileList(file, list, filterByFile);// 如果是目錄需要遞迴 } else { if (filterByFile.accept(file)) list.add(file); } } return list; } } public class FilterByFile implements FileFilter { public String suffix; public FilterByFile(String suffix) { super(); this.suffix = suffix; } public boolean accept(File pathname) { return pathname.getName().endsWith(suffix); } }