搬砖 - java文件夹对比

public class DirDiff {

    public static String getFileMD5(File file) {
        if (!file.isFile()) {
            return null;
        }
        MessageDigest digest = null;
        byte buffer[] = new byte[1024];
        int len;
        try (FileInputStream in = new FileInputStream(file);){
            digest = MessageDigest.getInstance("MD5");
            while ((len = in.read(buffer, 0, 1024)) != -1) {
                digest.update(buffer, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return new BigInteger(1, digest.digest()).toString(16);
    }


    public static Map<String, String> getDirMD5(File file, boolean listChild) {
        if (!file.isDirectory()) {
            return null;
        }
        Map<String, String> map = new HashMap<String, String>();
        String md5;
        File files[] = file.listFiles();
        for (File f : files) {
            if (f.isDirectory() && listChild) {
                map.putAll(getDirMD5(f, listChild));
            } else {
                md5 = getFileMD5(f);
                if (md5 != null) {
                    map.put(f.getPath(), md5);
                }
            }
        }
        return map;
    }

    public static void main(String[] args) {
        String dir1 = "C:\\IDOS\\dev\\automation\\verification\\today_day_end_files\\BIS2_baseinfo";
        String dir2 = "C:\\IDOS\\dev\\automation\\verification\\yesterday_day_end_files\\BIS2_baseinfo";

        Map<String, String> map = getDirMD5(new File(dir1), true);
        Map<String, String> map2 = getDirMD5(new File(dir2), true);
        
        Iterator<String> it = map.keySet().iterator();
        while (it.hasNext()) {
            String fullPath = it.next();
            String key2 = fullPath.replace(dir1, dir2);
            String md5Val = map.get(fullPath);
            String value2 = map2.remove(key2);
            if (value2 == null) {
                System.out.println("File is NOT exist! ----->  " + key2);
            } else if (!md5Val.equals(value2)) {
                System.out.println("File content is different! ==> " + fullPath);
            }
        }
        
        it = map2.keySet().iterator();
        while (it.hasNext()) {
            String key = it.next();
            String key2 = key.replace(dir2, dir1);
            System.out.println("File is NOT exist! ----->  " + key2);
        }
    }


    public String dirDiff(String orgPath, String otherPath, String... expectedFileList) {
        System.out.println("orgPath :" + orgPath);
        System.out.println("otherPath :" + otherPath);
        List<String> msgs = new ArrayList<>();
        File orgFile = new File(orgPath);
        File otherFile = new File(otherPath);
        if (!orgFile.isDirectory() || !otherFile.isDirectory()) {
            return String.format("Comparison is invalid between %s and %s", orgFile.getName(), otherFile.getName());
        }

        Map<String, String> map = getDirMD5(orgFile, true);
        Map<String, String> map2 = getDirMD5(otherFile, true);

        Iterator<String> it = map.keySet().iterator();
        while (it.hasNext()) {
            String fullPath = it.next();
            String key2 = fullPath.replace(orgPath, otherPath);
            String md5Val = map.get(fullPath);
            String value2 = map2.remove(key2);
            if (value2 == null) {
                msgs.add("File is NOT exist! ----->  " + key2);
            } else if (!md5Val.equals(value2)) {
                msgs.add("File content is different! ==> " + fullPath);
            }
        }

        it = map2.keySet().iterator();
        while (it.hasNext()) {
            String fullPath = it.next();
            String key2 = fullPath.replace(otherPath, orgPath);
            System.out.println("File is NOT exist! ----->  " + key2);
            msgs.add("File is NOT exist! ----->  " + key2);
        }

        return StringUtils.join(msgs, "\n");
    }

}

 

posted @ 2020-10-09 11:04  雾中的-松  阅读(154)  评论(0编辑  收藏  举报