1

有没有办法在不使用循环的情况下比较 2 个文本 (ODT) 文件?

关键是,在 aservlet中,我从 JavaScript 接收一个文件,我想将它与存储在服务器中的另一个文件进行比较。这就是我正在做的事情,但它不起作用,它说它们不相等,但它们是,它们的内容完全相同,因为它们是相同的文件。

我在 base64 中接收文件的内容并将其解析为 byte[](contentvar),然后打开存储的文件(savedFilevar)并将其解析为 byte[](savedFileBytevar)。然后我尝试使用Arrays.equals(). 正如我所说,它总是返回 false,但我确信内容是相同的。那么我做错了什么?或者,有没有另一种方法来处理这个?

我不想使用循环,因为这可能会比较很多文件,所以使用循环会降低性能。无论如何,如果这是唯一的方法,那就说吧!谢谢!

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String fileName = String.valueOf(request.getParameter("fileName"));

    byte[] content = Base64.decodeBase64(IOUtils.toByteArray(request.getInputStream()));

    FileInputStream savedFile = new FileInputStream("path/"+fileName);

    byte[] savedFileByte = IOUtils.toByteArray(savedFile);

    if (Arrays.equals(content, savedFileByte))
        System.out.println("MATCH!");
    else
        System.out.println("DO NOT MATCH!");

    savedFile.close();
}
4

1 回答 1

0

您可以使用 Apache Commons contentEquals。但是你必须知道,在内部,循环会发生......

例子:

File file1 = new File("test1.odt");
File file2 = new File("test2.odt");

boolean compare1and2 = FileUtils.contentEquals(file1, file2);

System.out.println("Are test1.txt and test2.txt the same? " + compare1and2);

要转换byte[]File也使用 Apache Commons writeByteArrayToFile或:

FileOutputStream fos = new FileOutputStream("pathname");
fos.write(myByteArray);
fos.close();
于 2015-05-25T07:37:57.343 回答