Java 如何比较两个文件以确定它们是否相同?
我曾经认为我可以使用校验和(MD5或CRC32)来改进上传方法。也就是说,如果文件校验和相同,我认为它是同一个文件。但是有一天我在Java 如何比较两个文件以确定它们是否相同?,java,file-handling,fileinputstream,Java,File Handling,Fileinputstream,我曾经认为我可以使用校验和(MD5或CRC32)来改进上传方法。也就是说,如果文件校验和相同,我认为它是同一个文件。但是有一天我在org.apache.commons.io.FileUtils中看到了代码,其中包含两个方法contentEquals和contentEqualsIgnoreEOL。检查同一文件有两种方法 if (file1.getCanonicalFile().equals(file2.getCanonicalFile())) { // same file
org.apache.commons.io.FileUtils
中看到了代码,其中包含两个方法contentEquals
和contentEqualsIgnoreEOL
。检查同一文件有两种方法
if (file1.getCanonicalFile().equals(file2.getCanonicalFile())) {
// same file
return true;
}
及
下面是让我困惑的
- 我无法获得有关
的足够信息。这是什么意思canonical
- 它使用IO流来检查文件,而不是校验和
if (file1.getCanonicalFile().equals(file2.getCanonicalFile())) {
// same file
return true;
}
校验和可用于通过预先缓存每个文件的校验和进行快速检查。MD5在某些情况下可能会发生冲突。然而,在大多数情况下,这是好的。为了更好地避免冲突,您可以使用其他哈希系统。我们在所有的文件传输中都使用校验和,因为能够随文件一起发送校验和是件好事,并且允许在远程系统上进行独立验证。(1)解析文件路径的真实位置;如果将两个符号链接的文件传递给同一个文件,则没有必要进行进一步测试。它们是同一个真实的文件。(2) 要计算MD5或CRC32,必须读取这两个文件并执行数学运算。如果你无论如何都在读这两本书,那么你最好一步一步地读,边读边比较。这样做的好处是,它可以在第一个差异处短路(如果有)。