如何比较两个文件看它们是否相同?

How to compare two files to see if they are the same?

我以前以为可以使用校验和(MD5或CRC32)来改进上传方式。也就是说,如果文件校验和相同,我认为它是同一个文件。但是有一天我看到 org.apache.commons.io.FileUtils 中的代码,其中包含两个方法 contentEqualscontentEqualsIgnoreEOL。有两种方法可以检查同一个文件。

if (file1.getCanonicalFile().equals(file2.getCanonicalFile())) {  
        // same file  
        return true;  
    } 

IOUtils.contentEquals(new FileInputStream(f1), new FileInputStream(f2));

以下是让我困惑的地方。

那么,在什么情况下我应该使用字节或校验和来检查同一个文件。

  1. 第一个检查文件路径以查看两个文件是否引用同一个文件。
  2. 第二次检查完整文件,看文件内容是否相同。

校验和

  1. 如果两个校验和不同,您可以自信地说文件不同。
  2. 如果两个校验和相等,则不能确定文件相同。

通过预先缓存每个文件的校验和,可以使用校验和进行快速检查。