java计算过G文件md5 值计算

原文链接:http://www.cnblogs.com/yaowukonga/p/3523668.html

 

package io.bigdata;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.Provider;

import java.security.Security;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

 

import org.apache.commons.codec.digest.DigestUtils;

 

public class Md5CaculateUtil {

 

    private Md5CaculateUtil(){

        

    }

    

    private static char[] hexChar = {

        '0','1','2','3','4','5','6','7','8','9',

        'a','b','c','d','e','f'

    };

    

    public static String getHash(String fileName,String hashType) throws IOException, NoSuchAlgorithmException{

        

        File f = new File(fileName);

        System.out.println(" -------------------------------------------------------------------------------");

        System.out.println("|当前文件名称:"+f.getName());

        System.out.println("|当前文件大小:"+(f.length()/1024/1024)+"MB");

        System.out.println("|当前文件路径[绝对]:"+f.getAbsolutePath());

        System.out.println("|当前文件路径[---]:"+f.getCanonicalPath());

        System.out.println(" -------------------------------------------------------------------------------");

        

        InputStream ins = new FileInputStream(f);

        

        byte[] buffer = new byte[8192];

        MessageDigest md5 = MessageDigest.getInstance(hashType);

        

        int len;

        while((len = ins.read(buffer)) != -1){

            md5.update(buffer, 0, len);

        }

 

        ins.close();

//        也可以用apache自带的计算MD5方法

        return DigestUtils.md5Hex(md5.digest());

//        自己写的转计算MD5方法

//        return toHexString(md5.digest());

    }

    

    public static String getHash2(String fileName){

        File f = new File(fileName);

        return String.valueOf(f.lastModified());

    }

    

    

    protected static String toHexString(byte[] b){

        StringBuilder sb = new StringBuilder(b.length*2);

        for(int i=0;i<b.length;i++){

            sb.append(hexChar[(b[i] & 0xf0) >>> 4]);

            sb.append(hexChar[b[i] & 0x0f]);

        }

        return sb.toString();

    }

    

    /*

     * 获取MessageDigest支持几种加密算法

     */

    @SuppressWarnings({ "rawtypes", "unchecked" })

    private static String[] getCryptolmpls(String serviceType){

        

        Set result = new HashSet();

//        all providers

        Provider[] providers = Security.getProviders();

        for(int i=0;i<providers.length;i++){

//            get services provided by each provider

            Set keys = providers[i].keySet();

            for(Iterator it = keys.iterator();it.hasNext();){

                String key = it.next().toString();

                key = key.split(" ")[0];

                

                if(key.startsWith(serviceType+".")){

                    result.add(key.substring(serviceType.length()+1));

                }else if(key.startsWith("Alg.Alias."+serviceType+".")){

                    result.add(key.substring(serviceType.length()+11));

                }

            }

        }

        return (String[]) result.toArray(new String[result.size()]);

    }

    

    

    public static void main(String[] args) throws Exception, Exception {

//        调用方法

//        String[] names = getCryptolmpls("MessageDigest");

//        for(String name:names){

//            System.out.println(name);

//        }

        long start = System.currentTimeMillis();

        System.out.println("开始计算文件MD5值,请稍后...");

        String fileName = "E:\\Office_2010_Toolkit_2.2.3_XiaZaiBa.zip";

       String fileName = "E:\\SoTowerStudio-3.1.0.exe";

        String hashType = "MD5";

        String hash = getHash(fileName,hashType);

        System.out.println("MD5:"+hash);

        long end = System.currentTimeMillis();

        System.out.println("一共耗时:"+(end-start)+"毫秒");

    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值