最近要弄一下Java读取文件MD5,注意这里是小文件,网上找了一下,有两种解决方案,一种是用MessageDigest来实现,另种是用org.apache.commons.codec.digest来实现,代码如下:

**[java]** [view plain](http://blog.csdn.net/wangqiuyun/article/details/22941433#) [copy](http://blog.csdn.net/wangqiuyun/article/details/22941433#)
  <div>
    <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1">
    </embed>
  </div>
  
  

    <span class="tracking-ad" data-mod="popu_167">[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/274974)</span><span class="tracking-ad" data-mod="popu_170">[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/274974/fork)</span></div> </div> 
    
    
      - <span class="keyword">package</span> cdm;
      
      - <span class="keyword">import</span> java.io.File;
      
      - <span class="keyword">import</span> java.io.FileInputStream;
      
      - <span class="keyword">import</span> java.io.FileNotFoundException;
      
      - <span class="keyword">import</span> java.io.IOException;
      
      - <span class="keyword">import</span> java.math.BigInteger;
      
      - <span class="keyword">import</span> java.nio.MappedByteBuffer;
      
      - <span class="keyword">import</span> java.nio.channels.FileChannel;
      
      - <span class="keyword">import</span> java.security.MessageDigest;
      
      - 
      - <span class="keyword">import</span> org.apache.commons.codec.digest.*;
      
      - <span class="keyword">import</span> org.apache.commons.io.IOUtils;
      
      - 
      - <span class="keyword">public</span> <span class="keyword">class</span> testMD5 {
      
      - 
      - <span class="keyword">public</span> <span class="keyword">static</span> String getMd5ByFile(File file) <span class="keyword">throws</span> FileNotFoundException {
      
      - String value = <span class="keyword">null</span>;
      
      - FileInputStream in = <span class="keyword">new</span> FileInputStream(file);
      
      - <span class="keyword">try</span> {
      
      - MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, <span class="number"></span>, file.length());
      
      - MessageDigest md5 = MessageDigest.getInstance(<span class="string">&#8220;MD5&#8221;</span>);
      
      - md5.update(byteBuffer);
      
      - BigInteger bi = <span class="keyword">new</span> BigInteger(<span class="number">1</span>, md5.digest());
      
      - value = bi.toString(<span class="number">16</span>);
      
      - } <span class="keyword">catch</span> (Exception e) {
      
      - e.printStackTrace();
      
      - } <span class="keyword">finally</span> {
      
      - <span class="keyword">if</span>(<span class="keyword">null</span> != in) {
      
      - <span class="keyword">try</span> {
      
      - in.close();
      
      - } <span class="keyword">catch</span> (IOException e) {
      
      - e.printStackTrace();
      
      - }
      
      - }
      
      - }
      
      - <span class="keyword">return</span> value;
      
      - }
      
      - 
      - <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String[] args) <span class="keyword">throws</span> IOException {
      
      - 
      - String path=<span class="string">&#8220;E:\\commons-codec-1.9-bin.zip&#8221;</span>;
      
      - 
      - String v = getMd5ByFile(<span class="keyword">new</span> File(path));
      
      - System.out.println(<span class="string">&#8220;MD5:&#8221;</span>+v.toUpperCase());
      
      - 
      - FileInputStream fis= <span class="keyword">new</span> FileInputStream(path);
      
      - String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
      
      - IOUtils.closeQuietly(fis);
      
      - System.out.println(<span class="string">&#8220;MD5:&#8221;</span>+md5);
      
      - 
      - <span class="comment">//System.out.println(&#8220;MD5:&#8221;+DigestUtils.md5Hex(&#8220;WANGQIUYUN&#8221;));</span>
      
      - }
      
      - 
      - }
      
    </div> 
    
    

      运行:
    

    
    

      ![](http://img.blog.csdn.net/20140404160025078?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3FpdXl1bg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
    

    
    

      结果在官网提供的MD5一致。
    

    
    

      附commons-codec-1.9.jar下载地址:[http://commons.apache.org/proper/commons-codec/download_codec.cgi](http://commons.apache.org/proper/commons-codec/download_codec.cgi)
    

    
    

      如果要处理过G的文件,请参照:[http://www.cnblogs.com/yaowukonga/p/3523668.html](http://www.cnblogs.com/yaowukonga/p/3523668.html)

💬 评论