我有一个简单的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