如何在Java中比较两个没有循环的文本文件(内容)?
有没有办法不使用循环就比较两个文本(ODT)文件 关键是,在一个如何在Java中比较两个没有循环的文本文件(内容)?,java,base64,bytearray,file-comparison,Java,Base64,Bytearray,File Comparison,有没有办法不使用循环就比较两个文本(ODT)文件 关键是,在一个servlet中,我从JavaScript接收到一个文件,我想将它与服务器中存储的另一个文件进行比较。这就是我正在做的,但它不起作用,它说它们不相等,但它们是相等的,它们的内容完全相同,因为它们是相同的文件 我在base64中接收文件的内容,并将其解析为字节[](contentvar),然后打开存储的文件(savedFilevar),并将其解析为字节[](savedFileBytevar)。然后我尝试使用Arrays.equals(
servlet
中,我从JavaScript接收到一个文件,我想将它与服务器中存储的另一个文件进行比较。这就是我正在做的,但它不起作用,它说它们不相等,但它们是相等的,它们的内容完全相同,因为它们是相同的文件
我在base64中接收文件的内容,并将其解析为字节[](content
var),然后打开存储的文件(savedFile
var),并将其解析为字节[](savedFileByte
var)。然后我尝试使用Arrays.equals()
比较两个byte[]变量。正如我所说,它总是返回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();
}
您可以使用apachecommons。但你必须知道,在内部,循环会发生 例如:
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);
要从字节[]
转换为文件
,请同时使用Apache Commons或:
但是如何将byte[]数据转换为
文件
对象呢?检查并编辑我的问题
FileOutputStream fos = new FileOutputStream("pathname");
fos.write(myByteArray);
fos.close();