基本上,我有两个完全合格的文件名字符串。我想比较两个文件是一样的。所以我将两个字符串转换为文件对象。使用谷歌的Files.equal(文件文件,文件file2)方法,我试图比较它们,但返回的值是假的。但是,想知道出了什么问题,我将两个文件对象都转换为字节数组并输出相同数字的数据。那么,有没有人知道为什么Files.equal会认为它们是假的。
我只是好奇为什么该方法返回false,因为在读取文件后,Files.equal按字节比较两个文件。
感谢。
代码:
public class WhenEncrypting {
private String[] args = new String[4];
/**
* encrypts a plain text file
*
* @throws IOException
* IOException could occur
*/
@Test()
public void normalEncryption() throws IOException {
this.args[0] = "-e";
this.args[1] = "./src/decoderwheel/tests/valid.map";
this.args[2] = "./src/decoderwheel/tests/input.txt";
this.args[3] = "./src/decoderwheel/tests/crypt.txt";
DecoderWheel.main(this.args);
File plainFile = new File("./src/decoderwheel/tests/input.txt");
File crypted = new File("./src/decoderwheel/tests/crypt.txt");
byte[] f1 = Files.toByteArray(plainFile);
byte[] f2 = Files.toByteArray(crypted);
int number = f1.length;
int size = f2.length;
Files.equal(crypted, plainFile);
System.out.println(number);
System.out.println(size);
System.out.println(Files.equal(crypted, plainFile));
assertTrue(Files.equal(crypted, plainFile));
}
}
Output:
360
360
false
答案 0 :(得分:1)
根据您向我们展示的内容,我认为问题很可能是两个文件的内容不相等。
两个字节数组(从文件中读取)具有相同的长度这一事实并不意味着它们的内容(以及文件的内容)是相同的。
添加如下内容:
for (int i = 0; i < f1.length; i++) {
if (f1[i] != f2[i]) {
System.out.println("File content mismatch at index " + i + ": " +
f1[i] + " != " + f2[i]);
}
}