java 获取文件MD5值
java 中,如何获取文件的MD5值呢?如何比较两个文件是否完全相同呢?
/** * Get MD5 of one file:hex string,test OK! * * @param file * @return */public static String getFileMD5(File file) {if (!file.exists() || !file.isFile()) {return null;}MessageDigest digest = null;FileInputStream in = null;byte buffer[] = new byte[1024];int len;try {digest = MessageDigest.getInstance("MD5");in = new FileInputStream(file);while ((len = in.read(buffer, 0, 1024)) != NEGATIVE_ONE) {digest.update(buffer, 0, len);}in.close();} catch (Exception e) {e.printStackTrace();return null;}BigInteger bigInt = new BigInteger(1, digest.digest());return bigInt.toString(16);}/*** * Get MD5 of one file!test ok! * * @param filepath * @return */public static String getFileMD5(String filepath) {File file = new File(filepath);return getFileMD5(file);}/** * MD5 encrypt,test ok * * @param data * @return byte[] * @throws Exception */public static byte[] encryptMD5(byte[] data) throws Exception {MessageDigest md5 = MessageDigest.getInstance(SystemUtil.KEY_MD5);md5.update(data);return md5.digest();}public static byte[] encryptMD5(String data) throws Exception {return encryptMD5(data.getBytes(SystemUtil.CHARSET_ISO88591));}/*** * compare two file by Md5 * * @param file1 * @param file2 * @return */public static boolean isSameMd5(File file1,File file2){String md5_1=SystemUtil.getFileMD5(file1);String md5_2=SystemUtil.getFileMD5(file2);return md5_1.equals(md5_2);}/*** * compare two file by Md5 * * @param filepath1 * @param filepath2 * @return */public static boolean isSameMd5(String filepath1,String filepath2){File file1=new File(filepath1);File file2=new File(filepath2);return isSameMd5(file1, file2);}
?测试(使用junit):
@Testpublic void test_getFileMD5() throws Exception{String filepath="D:\\download\\3_尚学堂_UML概览.avi";//File file=new File(filepath);String md5_1=SystemUtil.getFileMD5(filepath);System.out.println(md5_1);byte[]bytes=FileUtils.readBytes4file(filepath);byte[]md5=SystemUtil.encryptMD5(bytes);String md5_2=SystemUtil.toHexString(md5);System.out.println(md5_2);Assert.assertEquals(md5_1, md5_2);}
?