怎样用java实现文件比较,判断是否是同一个文件

本文介绍如何使用Java进行文件比较,主要通过检查文件大小和计算MD5值来判断两个文件是否相同。这种方法适用于图片和其他类型的文件,可以避免在爬虫抓取时下载重复内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题的提出:怎样用java实现文件的比较,比如两张图片是否相同,或任意两个文件是否为同一个文件?

解决思路:

文件进行比较是否相同,只要用于图片的比较,其它文件也可以的

比较的思路,首先比较两个文件大小是否相同,大小不相等肯定不是同一个文件

然后再比较文件的md5值 ,md5值不相等的两个文件肯定也不是同一个文件

用途:如做爬虫抓取图片,可以根据网址路径进行判断 ,但还是有网址路径不同,但图片内容是相同的,那就可以避免重复下载

package com.wyxbc.md5;
 
import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
 
/**
 * 文件进行比较是否相同,只要用于图片的比较,其它文件也可以的
 * 比较的思路,首先比较两个文件大小是否相同,大小不相等肯定不是同一个文件
 * 然后再比较文件的md5值 ,md5值不相等的两个文件肯定也不是同一个文件
 * 用途:如做爬虫抓取图片,可以根据网址路径进行判断 ,但还是有网址路径不同,但图片内容是相同的,那就可以避免重复下载
 * 网址:https://www.wyxbc.com/html/epAAaAA6y8tx0jAAaAAzLuiBQpEAAaAA6Q==.html
 * @author wyxbc.com it技术博客网
 *
 */
public class ImgMD5 {
    public static void main(String[] args) {
        File file1 = new File("E:\\website\\mybook\\upload\\20181025\\fa72e3199c984920bb1cd33071eb8e9d.jpg");
        File file2 = new File("E:\\website\\mybook\\upload\\20181025\\11107feab8ec499c93441b53d302aed0.jpg");
         
        System.out.println("文件长度输出===>");
        System.out.println(file1.length());
        System.out.println(file2.length());
         
        System.out.println("文件md5输出===>");
        String str1 = getFileMD5(file1);
        String str2 = getFileMD5(file2);
         
        System.out.println(str1);
        System.out.println(str2);
         
        System.out.println(str1.compareTo(str2) == 0?"true":"false");
    }
 
    /**
     * 获取文件的md5值
     * @param file 文件
     * @return 返回文件的md5值字符串
     */
    public static String getFileMD5(File file) {
        if (!file.isFile()) {
            return null;
        }
        MessageDigest digest = null;
        FileInputStream in = null;
        byte buffer[] = new byte[8192];
        int len;
        try {
            digest = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer)) != -1) {
                digest.update(buffer, 0, len);
            }
            BigInteger bigInt = new BigInteger(1, digest.digest());
            return bigInt.toString(16);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

看按照这个思路,其实也可以用它语言实现文件的比较,欢迎大家提供其它语言的版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值