1 package test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.math.BigInteger; 6 import java.security.MessageDigest; 7 import java.util.HashMap; 8 import java.util.Map; 9 10 public class FileDigest { 11 /** 12 * 获取单个文件的MD5值! 13 * 14 * @param file 15 * @return 16 */ 17 public static String getFileMD5(File file) { 18 if (!file.isFile()) { 19 return null; 20 } 21 MessageDigest digest = null; 22 FileInputStream in = null; 23 byte buffer[] = new byte[1024]; 24 int len; 25 try { 26 digest = MessageDigest.getInstance("MD5"); 27 in = new FileInputStream(file); 28 while ((len = in.read(buffer, 0, 1024)) != -1) { 29 digest.update(buffer, 0, len); 30 } 31 in.close(); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 return null; 35 } 36 BigInteger bigInt = new BigInteger(1, digest.digest()); 37 return bigInt.toString(16); 38 } 39 40 /** 41 * 获取文件夹中文件的MD5值 42 * 43 * @param file 44 * @param listChild 45 * ;true递归子目录中的文件 46 * @return 47 */ 48 public static Map<String, String> getDirMD5(File file, boolean listChild) { 49 if (!file.isDirectory()) { 50 return null; 51 } 52 // <filepath,md5> 53 Map<String, String> map = new HashMap<String, String>(); 54 String md5; 55 File files[] = file.listFiles(); 56 for (int i = 0; i < files.length; i++) { 57 File f = files[i]; 58 if (f.isDirectory() && listChild) { 59 map.putAll(getDirMD5(f, listChild)); 60 } else { 61 md5 = getFileMD5(f); 62 if (md5 != null) { 63 map.put(f.getPath(), md5); 64 } 65 } 66 } 67 return map; 68 } 69 70 public static void main(String[] args) { 71 File file1 = new File("H:/update/lib/111.txt"); 72 File file2 = new File("H:/1111.txt"); 73 System.out.println(getFileMD5(file1).equals(getFileMD5(file2))); 74 } 75 76 }