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

时间:2018-09-29 02:53:39

标签: java file-handling fileinputstream

我以前认为我可以使用校验和(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));

这是令我困惑的

  • 我无法获得有关canonical的足够信息。是什么意思?
  • 它使用IO流而不是校验和来检查文件。

因此,在哪种情况下我应该使用字节或校验和检查同一文件。

1 个答案:

答案 0 :(得分:1)

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

校验和

  1. 如果两个校验和不同,则可以放心地说文件不同。
  2. 如果两个校验和相等,则不能确定文件是否相同。

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