最近要弄一下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">[](https://code.csdn.net/snippets/274974)</span><span class="tracking-ad" data-mod="popu_170">[](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">“MD5”</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">“E:\\commons-codec-1.9-bin.zip”</span>;
-
- String v = getMd5ByFile(<span class="keyword">new</span> File(path));
- System.out.println(<span class="string">“MD5:”</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">“MD5:”</span>+md5);
-
- <span class="comment">//System.out.println(“MD5:”+DigestUtils.md5Hex(“WANGQIUYUN”));</span>
- }
-
- }
</div>
运行:

结果在官网提供的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)
💬 评论