JAVA 实现文件转成MD5码

        预先一个需求,要把文件存储至redies缓存中,但是考虑到key值得问题。我出的方案是将文件的内容生成的MD5码当做key值,当文件内容一样时,生成的MD5也一样,就不用重新存储了。。。。。

        废话不多说了,直接撸代码吧

/**
 * pdf2md5Util.java
 * admin.utils
*/

package admin.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.nutz.log.Log;
import org.nutz.log.Logs;

/**
 * pdf内容转成Md5码的工具包 
 */
public class Pdf2md5Util {

	private static final Log log = Logs.get();

	private static byte[] createChecksum(String filename) {
		InputStream fis = null;
		try {
			fis = new FileInputStream(filename);
			byte[] buffer = new byte[1024];
			MessageDigest complete = MessageDigest.getInstance("MD5");
			int numRead = -1;
			while ((numRead = fis.read(buffer)) != -1) {
				complete.update(buffer, 0, numRead);
			}
			return complete.digest();
		} catch (FileNotFoundException e) {
			log.info(e.getMessage());
		} catch (NoSuchAlgorithmException e) {
			log.info(e.getMessage());
		} catch (IOException e) {
			log.info(e.getMessage());
		} finally {
			try {
				if (null != fis) {
					fis.close();
				}
			} catch (IOException e) {
			}
		}
		return null;
	}

	//快速转换    十六进制数组的字节数组 
	public static String getMD5Checksum(String filename) {

		if (!new File(filename).isFile()) {
			log.info("Error: " + filename + " is not a valid file.");
			return null;
		}
		byte[] b = createChecksum(filename);
		if (null == b) {
			log.info("Error:create md5 string failure!");
			return null;
		}
		StringBuilder result = new StringBuilder();
		for (int i = 0; i < b.length; i++) {
			result.append(Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1));
		}
		return result.toString();
	}

	//===================================华丽分割线================================================

	/**
	 * 测试
	 * @Date 2018年4月21日
	 * @author gyp
	 * @param args(这里描述每个参数,如果有返回值描述返回值,如果有异常描述异常)
	 */
	public static void main(String args[]) {
		try {
			long beforeTime = System.currentTimeMillis();
			//String path = "C:\\Users\\Desktop\\测试文件\\1.pdf";
			String path = "C:\\Users\\Desktop\\测试文件\\2.pdf";
			//当两个pdf内容相等时,生成的MD5码一样
			String before = "ae058327a03fe8260117c3f345657aeb".toLowerCase();
			String md5 = getMD5Checksum(path);
			System.out.println(md5);
			System.out.println(md5.equals(before));

			File file = new File(path);
			System.out.println(path + "'s size is : " + file.length() + " bytes, it consumes "
					+ (System.currentTimeMillis() - beforeTime) + " ms.");
		} catch (Exception e) {
			System.out.println("出现异常:" + e.getMessage());
		}
	}

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值