根据文件生成MD5标识串,当两个标识串一致时认为文件内容相同。

文件生成MD5 String方法如下:


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.AccessController;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivilegedAction;/*** MD5验证文件是否为同文件**/
public class MD5File {protected static char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};/*** 根据文件生成MD5Str**/public static String getFileMD5Str(File file) throws IOException {String str;FileInputStream in = new FileInputStream(file);FileChannel ch = in.getChannel();//700000000 bytes are about 670Mint maxSize = 700000000;long startPosition = 0L;long step = file.length() / maxSize;MessageDigest messageDigest = null;try {messageDigest = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException nsaex) {nsaex.printStackTrace();in.close();ch.close();throw new JPMException("初始化失败,MessageDigest不支持MD5!");}if (step == 0) {MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length());messageDigest.update(byteBuffer);str = bufferToHex(messageDigest.digest());closeAll(in,ch,byteBuffer);return str;}for (int i = 0; i < step; i++) {MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, startPosition, maxSize);messageDigest.update(byteBuffer);startPosition += maxSize;bufferUnmap(byteBuffer);}if (startPosition == file.length()) {str = bufferToHex(messageDigest.digest());ch.close();in.close();return str;}MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, startPosition, file.length() - startPosition);messageDigest.update(byteBuffer);str = bufferToHex(messageDigest.digest());closeAll(in,ch,byteBuffer);return str;}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);}private static void closeAll(FileInputStream in,FileChannel ch ,MappedByteBuffer buffer) throws IOException{bufferUnmap(buffer);ch.close();in.close();}/*** 释放MappedByteBuffer** @param buffer*/private static void bufferUnmap(MappedByteBuffer buffer) {AccessController.doPrivileged(new PrivilegedAction() {public Object run() {try {Method getCleanerMethod = buffer.getClass().getMethod("cleaner", new Class[0]);getCleanerMethod.setAccessible(true);sun.misc.Cleaner cleaner = (sun.misc.Cleaner)getCleanerMethod.invoke(buffer, new Object[0]);cleaner.clean();} catch (Exception e) {e.printStackTrace();}return null;}});}
}

MD5验证文件是否重复相关推荐

  1. MD5验证文件完整性 C++

    读取文件内容并且做MD5验证 C++ 为了验证下载的文件是否完整,是否被篡改,常用的验证方法为MD5验证,文件生成32位验证码,可验证文件是否完整下载或被篡改. md5.h文件 #ifndef MD5 ...

  2. linux通过md5验证文件完整性,Linux下校验下载文件的完整性(MD5,SHA1,PGP)

    Linux下的学习开始总是艰难的,但有的时候,却发现Linux下远比Windows的操作来的实在的多--这下载文件的完整性就是其中一件,让本人觉着很爽的一件事情.在编译安装各种软件的时候,总要到各个网 ...

  3. 使用开源的openssl的md5头文件,实现对于文件的md5代码

    需要安装openssl的库 sudo apt-get install openssl sudo apt-get install libssl-dev 参考链接 代码 #include "op ...

  4. linux 校验文件生成,在Linux中了解如何使用MD5校验和生成和验证文件

    校验和是用作在数据正确数字的总和,其可以稍后用于存储或传输期间检测数据中的错误的一个数字.MD5( 消息摘要5)的款项可以用作校验和,以验证文件或字符串在Linux的文件系统 . MD5校验和是128 ...

  5. php检测txt中重复数据,Python实现检测文件的MD5值来查找重复文件案例

    平时学生交上机作业的时候经常有人相互复制,直接改文件名了事,为了能够简单的检测这种作弊行为,想到了检测文件的MD5值,虽然对于抄袭来说作用不大,但是聊胜于无,以后可以做一个复杂点的. # coding ...

  6. asp判断ajax请求 -asp.net,一个asp注册验证用户名是否重复的Ajax实例

    一个asp注册验证用户名是否重复的Ajax实例 1.需要用到的初始化xmlhttp实例和发送请求的javascript函数: 以下为引用的内容: // JavaScript Document func ...

  7. C++安全方向(三)3.4 使用哈希列表验证文件的完整性

    操作步骤 1.哈希列表(Hash List) 2.读取文件,分块生成hash值 3.合并所有hash值再生成hash值 4.hash(hash(f1)-hash(f100)) 问题:为什么要用哈希列表 ...

  8. MD5在文件中的使用

    目录 简介 Demo1(基于字符串) Demo2(基于文件) 简介 在公司的本次开发中牵涉到了一个导出导出,利用MD5保证文件没有被修改过,, 导出的文件格式如下  metis.data(文件名){ ...

  9. 一个简单的在线md5验证工具的实现

    因为要开始找工作了,因此更新博客的时间变长了.这学期学校开了门c#.NET的课程,基于.NET技术的强大,我也决定开始自学用ASP.NET来开发网站(以前曾用ASP开发过). 今天遇到要在数据库中存储 ...

最新文章

  1. msra数据集_ACL2020 | 香侬科技提出使用Dice Loss缓解数据集数据不平衡问题
  2. java迷宫生成代码_通过深度优先搜索产生的迷宫的Java代码
  3. 批量实现ssh免交互认证
  4. SVM支持向量机绘图
  5. 剑指offer——二进制中1的个数(c++)
  6. mysql日志存储类型_msyql 日志分类、存储、慢查询日志
  7. openwrt+php+not+found,openwrt路由翻车,等高手
  8. pb9 调用系统语音_语音通知解决方案,VIKI语音通知软件介绍
  9. kali linux(全版本)详细安装w3af指南(文内提供成品镜像下载)
  10. 【Linux】关于Linux中的权限
  11. [Android各版本特性]Android 4.4 Kitkat
  12. 少儿编程学习(循环及条件语句)
  13. LOAM系列——LeGO-LOAM配置、安装、问题解决及VLP16测试效果(完结版)
  14. OpenWrt之网络配置文件(基于新三mt7621)
  15. matlab bar 填充花纹,Matlab中画花纹填充的柱状图
  16. Vlc.DotNet C#音视频播放器使用说明及简单实例
  17. ENVI实验教程(5) 实验五、遥感图像增强
  18. [错误]文件 UNKNOWN.RPT 内出错:无法将请求提交给后台处理。
  19. 路由器、交换机、集线器工作在哪一层
  20. firefox js服务器上怎么显示图片的绝对路径,js兼容火狐显示上传图片预览效果的方法...

热门文章

  1. 浦东朋友夏天的时间线
  2. ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连
  3. 计算机音乐数字乐谱童话,童话钢琴简谱-数字双手-光良
  4. 清华大学的计算机新世界排名,清华蝉联计算机科学AI专业全球冠军 交大排名第6...
  5. Silverlight开发实践--My Silverlight Clock (源)
  6. 【Oracle】数据字典初步理解
  7. ASEMI整流模块MDA110-16参数,MDA110-16规格
  8. 阿里云—岁末沙龙活动
  9. 《Windows程序设计》读书笔十 菜单和其他资源
  10. 嵌入式开发 | 单片机能用C++开发吗?