美文网首页
java获取文件MD5

java获取文件MD5

作者: sxqiong | 来源:发表于2017-11-12 18:14 被阅读25次

    万事开头难--获取文件MD5

    话不多说直接上码,菜鸟一枚,大家希望多多指点

    package com.learn.java.file;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    import java.security.MessageDigest;
    
    /**
     * Created by 尚晓琼 on 2017/9/28.
     */
    public class FileMD5 {
    
        public String getMd5ByFile(File file) throws FileNotFoundException {
            FileInputStream in = new FileInputStream(file);
            StringBuffer sb = new StringBuffer();
            try {
                FileChannel channel = in.getChannel();
                long position = 0;
                long total = file.length();
                long page = 1024 * 1024 * 500;
                MessageDigest md5 = MessageDigest.getInstance("MD5");
                while (position < total) {
                    long size = page <= total - position ? page : total - position;
                    MappedByteBuffer byteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, position, size);
                    position += size;
                    md5.update(byteBuffer);
                }
                byte[] b = md5.digest();
    
                for (int i = 0; i < b.length; i++) {
                    sb.append(byteToChars(b[i]));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
    
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return sb.toString();
        }
    
        private char[] byteToChars(byte b) {
            int h = ((b & 0xf0) >> 4);
            int l = (b & 0x0f);
            char[] r = new char[2];
            r[0] = intToChart(h);
            r[1] = intToChart(l);
    
            return r;
        }
    
        private char intToChart(int i) {
            if (i < 0 || i > 15) {
                return ' ';
            }
            if (i < 10) {
                return (char) (i + 48);
            } else {
                return (char) (i + 55);
            }
        }
    }
    

    期望

    • 实现md5秒传。。。只是最近好像没什么时间···

    相关文章

      网友评论

          本文标题:java获取文件MD5

          本文链接:https://www.haomeiwen.com/subject/zsromxtx.html