Java计算文件MD5值代码详解编程语言

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.nio.MappedByteBuffer; 
import java.nio.channels.FileChannel; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
 
public class FileMd5Utils { 
     protected static char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};   
        protected static MessageDigest messageDigest = null;   
        static{ 
            try{   
                messageDigest = MessageDigest.getInstance("MD5");   
            }catch (NoSuchAlgorithmException e) {   
                System.err.println(FileMd5Utils.class.getName()+"初始化失败,MessageDigest不支持MD5Util.");   
                e.printStackTrace();   
            }   
        }   
 
        /**  
         * 计算文件的MD5  
         * @param fileName 文件的绝对路径  
         * @return  
         * @throws IOException  
         */   
        public static String getFileMD5String(String fileName) throws IOException{   
            File f = new File(fileName);   
            return getFileMD5String(f);   
        }   
 
        /**  
         * 计算文件的MD5,重载方法  
         * @param file 文件对象  
         * @return  
         * @throws IOException  
         */   
        public static String getFileMD5String(File file) throws IOException{   
            FileInputStream in = new FileInputStream(file);   
            FileChannel ch = in.getChannel();   
            MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length());   
            messageDigest.update(byteBuffer);   
            return bufferToHex(messageDigest.digest());   
        }   
 
        private static String bufferToHex(byte bytes[]) {   
           return bufferToHex(bytes, 0, bytes.length);   
        }   
 
        private static String bufferToHex(byte bytes[], int m, int n) {   
           StringBuffer stringbuffer = new StringBuffer(2 * n);   
           int k = m + n;   
           for (int l = m; l < k; l++) {   
            appendHexPair(bytes[l], stringbuffer);   
           }   
           return stringbuffer.toString();   
        }   
 
        private static void appendHexPair(byte bt, StringBuffer stringbuffer) {   
           char c0 = hexDigits[(bt & 0xf0) >> 4];   
           char c1 = hexDigits[bt & 0xf];   
           stringbuffer.append(c0);   
           stringbuffer.append(c1);   
        }   
 
        public static void main(String[] args) throws IOException {   
            String fileName = "F://test01//1.txt"; 
            String str = "d0970714757783e6cf17b26fb8e2298f"; 
            String str2 = "ea3ed20b6b101a09085ef09c97da1597"; 
            System.out.println(str.equals(str2)); 
            System.out.println(getFileMD5String(fileName)); 
        }   
} 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10943.html

(0)
上一篇 2021年7月19日 10:32
下一篇 2021年7月19日 10:32

相关推荐

发表回复

登录后才能评论