• 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);
    	}
    

      测试:

    @Test
        public 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);
        }
  • 相关阅读:
    Vim直接打开Tampermonkey网址的方法。
    利用 Tampermonkey 和 Surfingkeys 效率操作网页
    tampermonkey利用@require调用本地脚本的方法
    用AutoHotkey一键完成Xmind插入图片等功能
    用AutoHotkey调整Windows音量
    用AutoHotkey重置Excel的Ctrl+Alt+方向键选择的范围
    远程终端协议TELNET
    文件传送协议
    域名系统DNS
    计算机网络运输层习题5-38
  • 原文地址:https://www.cnblogs.com/diaozhaojian/p/7212511.html
Copyright © 2020-2023  润新知