比较不同目录文件夹下同名文件的数量和显示同名文件名

来源:互联网 发布:sqlserver工程师培训 编辑:程序博客网 时间:2024/04/29 10:58

大概思路: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);}}


阅读全文
0 0
原创粉丝点击