1 packageio.bigdata;2
3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.IOException;6 importjava.io.InputStream;7 importjava.security.MessageDigest;8 importjava.security.NoSuchAlgorithmException;9 importjava.security.Provider;10 importjava.security.Security;11 importjava.util.HashSet;12 importjava.util.Iterator;13 importjava.util.Set;14
15 importorg.apache.commons.codec.digest.DigestUtils;16
17 public classMd5CaculateUtil {18
19 privateMd5CaculateUtil(){20
21 }22
23 private static char[] hexChar ={24 '0','1','2','3','4','5','6','7','8','9',25 'a','b','c','d','e','f'
26 };27
28 public static String getHash(String fileName,String hashType) throwsIOException, NoSuchAlgorithmException{29
30 File f = newFile(fileName);31 System.out.println(" -------------------------------------------------------------------------------");32 System.out.println("|当前文件名称:"+f.getName());33 System.out.println("|当前文件大小:"+(f.length()/1024/1024)+"MB");34 System.out.println("|当前文件路径[绝对]:"+f.getAbsolutePath());35 System.out.println("|当前文件路径[---]:"+f.getCanonicalPath());36 System.out.println(" -------------------------------------------------------------------------------");37
38 InputStream ins = newFileInputStream(f);39
40 byte[] buffer = new byte[8192];41 MessageDigest md5 =MessageDigest.getInstance(hashType);42
43 intlen;44 while((len = ins.read(buffer)) != -1){45 md5.update(buffer, 0, len);46 }47
48 ins.close();49 //也可以用apache自带的计算MD5方法
50 returnDigestUtils.md5Hex(md5.digest());51 //自己写的转计算MD5方法52 //return toHexString(md5.digest());
53 }54
55 public staticString getHash2(String fileName){56 File f = newFile(fileName);57 returnString.valueOf(f.lastModified());58 }59
60
61 protected static String toHexString(byte[] b){62 StringBuilder sb = new StringBuilder(b.length*2);63 for(int i=0;i>> 4]);65 sb.append(hexChar[b[i] & 0x0f]);66 }67 returnsb.toString();68 }69
70 /*
71 * 获取MessageDigest支持几种加密算法72 */
73 @SuppressWarnings({ "rawtypes", "unchecked"})74 private staticString[] getCryptolmpls(String serviceType){75
76 Set result = newHashSet();77 //all providers
78 Provider[] providers =Security.getProviders();79 for(int i=0;i
81 Set keys =providers[i].keySet();82 for(Iterator it =keys.iterator();it.hasNext();){83 String key =it.next().toString();84 key = key.split(" ")[0];85
86 if(key.startsWith(serviceType+".")){87 result.add(key.substring(serviceType.length()+1));88 }else if(key.startsWith("Alg.Alias."+serviceType+".")){89 result.add(key.substring(serviceType.length()+11));90 }91 }92 }93 return (String[]) result.toArray(newString[result.size()]);94 }95
96
97 public static void main(String[] args) throwsException, Exception {98 //调用方法99 //String[] names = getCryptolmpls("MessageDigest");100 //for(String name:names){101 //System.out.println(name);102 //}
103 long start =System.currentTimeMillis();104 System.out.println("开始计算文件MD5值,请稍后...");105 String fileName = "E:\\Office_2010_Toolkit_2.2.3_XiaZaiBa.zip";106 String fileName = "E:\\SoTowerStudio-3.1.0.exe";
107 String hashType = "MD5";108 String hash =getHash(fileName,hashType);109 System.out.println("MD5:"+hash);110 long end =System.currentTimeMillis();111 System.out.println("一共耗时:"+(end-start)+"毫秒");112 }113 }