File file = new File("cos_code2003.bin");
System.out.println(file.length());
byte[] data = new byte[(int) file.length()];
if (file.exists()) {
FileInputStream fis;
try {
fis = new FileInputStream(file);
fis.read(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
System.out.println("wenjian buzun");
} String a = computeMd5(data);
System.out.println(a);
} private static String computeMd5(byte[] origin) {
byte[] ret = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
ret = md5.digest(origin); StringBuilder hexString = new StringBuilder();
for (int i = 0; i < ret.length; i++) {
String h = Integer.toHexString(0xFF & ret[i]);
while (h.length() < 2) {
h = "0" + h;
}
hexString.append(h);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} return "AV";
}

  md5校验不难,就是知道一个MessageDigest类,获取实例,直接调用digest方法就可以了。不过校验后得到的是一个数量为16的byte数组,要转换成一个32位的16进制校验和,还需要作一下转换,注意这里用了一个StringBuilder类,把字节和0XFF进行与操作就可以了。另外注意的是当字节数少于16的时候要加一个前缀0,这里用的表示法是h.length,其它也有一些表示如0X10,其实是一样的。最后转成string就可以了。

  另外注意这里的File文件的构造函数里面的文件名的写法file,这里应该是java工程根目录下的文件名,而不是和代码在一个地方的文件名。

  上面的md5校验在计算超过2GB的大文件就会有问题,因为一个Int数组的最大只有2GB,2的31次方,否则内存会撑不住。

  这里再给出一个方法,

  

private static String checkMd5(File f) {

        FileInputStream fis = null;
byte[] rb = null;
DigestInputStream digestInputStream = null;
try {
fis = new FileInputStream(f);
MessageDigest md5 = MessageDigest.getInstance("md5");
digestInputStream = new DigestInputStream(fis,
md5);
byte[] buffer = new byte[];
while (digestInputStream.read(buffer) > )
;
md5 = digestInputStream.getMessageDigest();
rb = md5.digest();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}finally{
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
} StringBuilder sb = new StringBuilder();
for (int i = ; i < rb.length; i++) {
String a = Integer.toHexString(0XFF & rb[i]);
if (a.length() < ) {
a = '' + a;
}
sb.append(a);
}
return sb.toString();
}

  这个方法,经测试2.7GB文件的MD5没有出错。

关于MD5校验和java工程下的校验的更多相关文章

  1. Eclipse IDE 添加jar包到Java工程中

    操作系统:Windows 10 x64 工具1:Eclipse Java EE IDE for Web Developers. Version: Photon Release (4.8.0) 在Pac ...

  2. Log4j在Java工程中使用方法

    Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...

  3. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  4. Intellij IDEA下导出Java工程的可运行JAR包

    Intellij IDEA下导出Java工程的可运行JAR包 昨天一直向导出一个Java工程的可运行JAR包,然后查阅网上的资料以及自己一遍一遍的尝试,均以失败告终.可以导出JAR包,但是导出的JAR ...

  5. ubuntu命令行下java工程编辑与算法(第四版)环境配置

    ubuntu命令行下java工程编辑与算法(第四版)环境配置 java 命令行 javac java 在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是 ...

  6. Java-Maven(五):Eclipse&Maven下创建java工程&web工程

    本章文章主要学习集成了maven插件的eclipse下,创建java project和web project的步骤. 创建java工程  第一步:使用使用maven project来创建java pr ...

  7. 递归实现列出当前工程下所有.Java文件

    package com.lanxi.demo2_3; import java.io.File; import java.util.ArrayList; import java.util.List; / ...

  8. Eclipse下的java工程目录

    对新手来讲,一个Java工程内部的多个文件夹经常会让大家困惑.更可恶的是莫名其妙的路径问题,在Eclipse编写Java程序中,出现频率最高的错误很可能就是路径问题. 这些问题原因其实都是一个,就是关 ...

  9. MD5介绍及Windows下对文件做md5校验。

    MD5介绍参考百度百科: 摘要如下: MD5 校验和(checksum)通过对接收的传输数据执行散列运算来检查数据的正确性. 一个散列函数,比如 MD5,是一个将任意长度的数据字符串转化成短的固定长度 ...

随机推荐

  1. 提取WORD中的所有InlineShape图片并保存成文件

    InlineShape表示的类型其实不只是图片,还包括OLE, ACTIVE X等. 下面是MSDN中的定义:Represents an object in the text layer of a d ...

  2. Linux下的iwpriv(iwlist、iwconfig)的简单应用

    无线网络飞速发展的今天,许多设备都提供了连接无线网络的功能. 那么Linux下的wifi到底该怎么配置.连接呢?? 开始配置之前,我们要说说iw家族.iw是linux下常用的wifi配置工具,网上有相 ...

  3. mac 卸载 XCode

    http://blog.csdn.net/songques/article/details/7244144

  4. 【原】Scala学习资料

    Scala是基于JVM的一种通用函数式也是面向对象编程语言,能和Java.C#等主流的编程语言无缝融合. 下面给大家推荐一些Scala的学习资料,序号靠前的重要性比较高. 1.Scala初学指南 (1 ...

  5. 【JS】Intermediate9:jQuery: Other Tricks

    1.DOMContentLoaded Run JavaScript only when the DOM is loaded and ready (but before stylesheets are ...

  6. 洛谷P1471 方差

    蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. ——by 洛谷; http://www.luogu.org/problem/show?pid=1 ...

  7. Spring mvc Interceptor 解决Session超时配置流程

    最近公司内部框架中对Session超时这一功能未实现,由于采用iframe结构,Session超时后,当点击左侧系统菜单时,会在iframe的右侧再次弹出登陆框. 该问题是由于没有设置拦截器造成. 添 ...

  8. [2014.5.22][UBUNTU]Ubuntu与Windows系统时间不同步的问题

    安装Ubuntu+Windows双系统时会遇到Windows和Ubuntu系统时间不同步的问题,这是由于Windows系统默认读取主板bios等硬件系统时间作为OS的当地时间;而MAc,Linux类的 ...

  9. oncopy和onpaste

    在Javascript中,有对应的事件能够监听复制和粘贴,那就是oncopy和onpaste. oncopy: demo: <body oncopy="alert('不能复制');re ...

  10. Unityclient通信測试问题处理(二)

    Unityclient通信測试问题处理(二) 在client的通信測试过程中.场景载入的问题给自己带来了不小的麻烦.由于消息的解析方法在单独的监听线程中调用,这也就意味着无法在消息的解析方法中调用Un ...