我需要对文件进行指纹识别以匹配双重文件。2013年推荐使用Java的什么?我是否应该比较文件大小,还是这是一个不必要的检查?
误判概率应该非常接近于0。
编辑:有很多答案,谢谢。今天备份软件的标准是什么? SHA-256?更高吗?我猜md5不太适合?
我需要对文件进行指纹识别以匹配双重文件。2013年推荐使用Java的什么?我是否应该比较文件大小,还是这是一个不必要的检查?
误判概率应该非常接近于0。
编辑:有很多答案,谢谢。今天备份软件的标准是什么? SHA-256?更高吗?我猜md5不太适合?
Files.asByteSource(file1).contentEquals(Files.asByteSource(file2));
它负责打开和关闭文件以及比较的详细信息。
如果您愿意接受虚警概率小于被雷击中的可能性,那么您可以这样做
Files.hash(file, Hashing.sha1()); // or md5(), or sha256(), or...
你可以使用HashCode
方法返回一个哈希码,然后将其与另一个文件的哈希值进行比较。 (该版本还处理了MessageDigest
的混乱,正确打开和关闭文件等问题。)
您是否想知道如何在Java中获取文件的md5校验和?如果是这样,请阅读接受的答案这里和这里。基本上,做这个:
import java.security.DigestInputStream;
...
...
MessageDigest md_1 = MessageDigest.getInstance("MD5");
MessageDigest md_2 = MessageDigest.getInstance("MD5");
InputStream is_1 = new FileInputStream("file1.txt");
InputStream is_2 = new FileInputStream("file2.txt");
try {
is_1 = new DigestInputStream(is_1, md_1);
is_2 = new DigestInputStream(is_2, md_2);
}
finally {
is_1.close();
is_2.close();
}
byte[] digest_1 = md_1.digest();
byte[] digest_2 = md_2.digest();
// compare digest_1 and digest_2
我是否还应该比较文件大小,或者这是一个不必要的检查?
这是不必要的。