2012-05-25 45 views
2

我想用char by char比較來斷言文件。 要做到這一點的最佳方法是什麼?沒有第三部分庫。哪個文件閱讀器最適合這個性能?Java,斷言文件等於

+1

有多大的文件?如果它們足夠小,那麼只需將它們加載到內存中,並將'byte []'與適當的斷言工具進行比較可能是最簡單的方法。如果它們可以更大,那當然是行不通的。 –

+0

從0到10000字節 – Ilya

+2

這應該很容易適應內存。注意:兩個文件可以有不同的字節,但具有完全相同的字符。 ;) –

回答

12

不知道對第三方庫有什麼異議......不需要重新發明輪子。

我發現了開源和廣泛使用apache.commons.io方法FileUtils.contentEquals(file1, file2)是相當不錯的 - 這裏是javadoc

+0

有沒有這個函數的java 7實現? – Thomas

+0

@Thomas - no。當問這個問題時,Java 7已經出現了將近一年了,正如答案所示,這需要第三方庫。 – amaidment

2

如果你碰巧使用谷歌番石榴庫,然後你可以使用:

Files.equal(file1, file2); 

docs

Returns true if the files contains the same bytes. 
+0

沒有[equals](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/Files.html)。 – wener

+0

@ wener固定,它是'平等' – Andrejs

1

對於小文件(高達數MB),流式I/O會產生很少的好處,所以你可以保持簡單:

Arrays.equals(Files.readAllBytes(firstFile), Files.readAllBytes(secondFile)); 

如果你想使用不同的編碼S,你也可以將字節解碼成字符:

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

這隻需要Java 7