Java,断言文件等于

Java,断言文件等于,java,performance,equals,Java,Performance,Equals,我想使用逐字符比较来断言文件。 最好的方法是什么?没有第三部分库。哪种文件读取器的性能最好?不确定对第三方库的异议是什么。。。不需要重新发明轮子 我发现开源且广泛使用的方法FileUtils.contentEquals(file1,file2)非常好-下面是一个方法。如果您碰巧正在使用Google Guava库,那么您可以使用: Files.equal(file1, file2); 从: 对于小文件(高达几MB),流式I/O将不会带来什么好处,因此您可以保持简单: Arrays.equals(

我想使用逐字符比较来断言文件。
最好的方法是什么?没有第三部分库。哪种文件读取器的性能最好?

不确定对第三方库的异议是什么。。。不需要重新发明轮子


我发现开源且广泛使用的方法
FileUtils.contentEquals(file1,file2)
非常好-下面是一个方法。

如果您碰巧正在使用Google Guava库,那么您可以使用:

Files.equal(file1, file2);
从:

对于小文件(高达几MB),流式I/O将不会带来什么好处,因此您可以保持简单:

Arrays.equals(Files.readAllBytes(firstFile), Files.readAllBytes(secondFile));
如果要使用不同的编码,还可以将字节解码为字符:

boolean equal = new String(Files.readAllBytes(firstFile), firstEncoding).equals(
                new String(Files.readAllBytes(secondFile), secondEncoding));

这只需要Java 7。

文件有多大?如果它们足够小,那么简单地将它们加载到内存中,并将
字节[]
与适当的断言工具进行比较可能是最简单的方法。如果它们可以更大,那当然不行。这应该很容易放在内存中。注意:两个文件可以有不同的字节,但具有完全相同的字符。;)而且,由于帖子被标记为“performance”:在阅读Java 7之前,您可能应该检查两者的大小是否相同(如果我没有记错的话,Java 7中引入了Java.nio.file.Files.size(…))。这个函数有Java 7实现吗?@Thomas-no。当有人问这个问题时,Java 7已经问世将近一年了,正如答案所示,这需要一个第三方库。没有。@wener修复,它是
equal
boolean equal = new String(Files.readAllBytes(firstFile), firstEncoding).equals(
                new String(Files.readAllBytes(secondFile), secondEncoding));