我有一個簡單的JUnit測試,它檢查兩個文件具有相同的內容。它在我的Unix筆記本電腦中工作得很好。比較依賴於操作系統的文件。 JUnit
這是測試:
boolean response = false;
try {
File got = File.createTempFile("got-", ".csv");
String outputPath = got.getAbsolutePath();
testedObject.createCsvFile(outputPath);
got = new File(outputPath);
String expectedFilePath = getClass().getClassLoader().getResource("expected.csv").getFile();
File expected = new File(expectedFilePath);
response = FileUtils.contentEquals(got, expected); // Here it is the key
} catch (IOException e) {
// Nothing to do Yay!
}
Assert.assertTrue(response);
它的工作原理,因爲如果我手動比較這兩個文件,通過diff
命令例子,是完全一樣的。現在。
我的teem-mate代碼與Windows筆記本電腦,當他跑了測試它打倒了!我們開始調試。
可見,兩個文件是相同的;我的意思是在人修訂版中,您無法實現任何區別。但是如果在我們執行的Cwin終端上: diff expected.csv got.csv
和windows認爲每一行都不一樣
然後測試就落了。
問題是,操作系統是什麼?如果這是真的,有沒有什麼辦法可以比較文件內容不依賴手術系統
非常喜歡你的答案。你能解釋一下如何比較兩個文件散列? – Manu
我不是java專家=)但顯然這個答案是你想要的http://stackoverflow.com/questions/6293713/java-how-to-create-sha-1-for-a-file然後只是比較兩個散列值 – Andrea
「正確的方法檢查散列是否匹配」不!唯一可以用這種檢查來斷言的是兩個文件都不相等。如果散列值相等,則不能確定文件是否相同(儘管它們很可能)。這不是正確的方法。 – Seelenvirtuose