rendered paste bodyimport java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Set;import java.util.Map.Entry;import com.zynamics.io.FileUtils;public class CheckSummer{ private final HashMap<Long, ArrayList<File>> fileSizes = new HashMap<Long, ArrayList<File>>(); private final HashMap<String, ArrayList<File>> md5s = new HashMap<String, ArrayList<File>>(); private final HashMap<String, ArrayList<File>> md5s2 = new HashMap<String, ArrayList<File>>(); public static void main(String[] args) { CheckSummer cs = new CheckSummer(); cs.traverse(new File("F:\\@@")); try { cs.md5_first(); cs.md5_second(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } cs.print(); } private void print() { Set<Entry<String, ArrayList<File>>> values = md5s2.entrySet(); for (Entry<String, ArrayList<File>> e : values) { if (e.getValue().size() == 1) { continue; } System.out.println("Equal"); for (File f : e.getValue()) { System.out.println(f.getAbsolutePath()); } } } private void md5_second() throws IOException { Set<Entry<String, ArrayList<File>>> values = md5s.entrySet(); for (Entry<String, ArrayList<File>> e : values) { if (e.getValue().size() == 1) { continue; } for (File file : e.getValue()) { String md5 = FileUtils.calcMD5(file); if (md5s2.containsKey(md5)) { md5s2.get(md5).add(file); } else { ArrayList<File> list = new ArrayList<File>(); list.add(file); md5s2.put(md5, list); } } //md5s.remove(e.getKey()); } } private void md5_first() throws IOException { Set<Entry<Long, ArrayList<File>>> values = fileSizes.entrySet(); for (Entry<Long, ArrayList<File>> e : values) {// System.out.println(e.getValue().size()); if (e.getValue().size() == 1) { continue; } for (File file : e.getValue()) { byte[] data = FileUtils.readFile(file, 100); String md5 = FileUtils.calcMD5(data); // System.out.printf("%s has size %s\n", file.getAbsoluteFile(), md5); if (md5s.containsKey(md5)) { md5s.get(md5).add(file); } else { ArrayList<File> list = new ArrayList<File>(); list.add(file); md5s.put(md5, list); } } //fileSizes.remove(e.getKey()); } } private void traverse(File directory) { File[] files = directory.listFiles(); for (File file : files) { if (file.isDirectory()) { traverse(file); } else { long length = file.length(); System.out.printf("%s has size %d\n", file.getAbsoluteFile(), length); if (fileSizes.containsKey(length)) { fileSizes.get(length).add(file); } else { ArrayList<File> list = new ArrayList<File>(); list.add(file); fileSizes.put(length, list); } } } }}