1

ループを使用せずに 2 つのテキスト (ODT) ファイルを比較する方法はありますか?

要点は、 内でservletJavaScript からファイルを受け取り、それをサーバーに保存されている別のファイルと比較したいということです。これは私がやっていることですが、機能していません。それらは等しいとは言えませんが、同じファイルであるため、内容はまったく同じです。

base64 でファイルのコンテンツを受け取り、それをバイト [] ( var) に解析してからcontent、保存されたファイル ( savedFilevar) を開き、それをバイト [] ( var) に解析しますsavedFileByte。次に、を使用して両方の byte[] 変数を比較しようとし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[]FileApache Commons も使用するwriteByteArrayToFileまたは:

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