Vergleichen Sie zwei Dokumente in Java
Ich habe zwei Word-Dokumente, die ich in Java vergleichen möchte. Ich habe es versucht
md5 Hashcode
HashCode newFile = Files.asByteSource(newFileInput).hash(Hashing.md5());
HashCode oldFile = Files.asByteSource(oldFileInput).hash(Hashing.md5());
und auch mit,
boolean isEqual = FileUtils.contentEquals (oldFile, newFile);
Obwohl der Inhalt derselbe ist, verglichen mit dem Inhalt mit Online-Tools und unvergleichlich, kommt der Hashcode in beiden oben genannten Methoden immer noch als MISMATCH.
irgendwelche Lösungen? oder eine Möglichkeit, einen beliebigen Dateityp mit einer beliebigen API in Java zu vergleichen. Ich muss einen tiefen Vergleich zwischen zwei Wortdateien durchführen, z. B. für Leerzeichen, Schriftarten und Inhalte. usw..
Erwartetes Ergebnis: Beide Dateien sollten übereinstimmen
Antworten
Selbst wenn beide Dokumente gleich aussehen oder wenn beide den gleichen formatierten Inhalt enthalten, führt eine geringfügige Änderung wie das Datum der letzten Änderung zu einem fehlgeschlagenen Vergleich. JSON-Dokumente sind einfacher zu vergleichen, Word-Dokumente jedoch binär. Die kleinste Änderung kann das Dokument vollständig ändern.
Sie müssen es also auf die harte Tour machen: Suchen Sie eine Bibliothek, um den Inhalt der Word-Dateien selbst zu lesen, und überprüfen Sie den Inhalt beider Dateien speziell.
Es gab mehrere Vorschläge und Antworten auf meine Frage, danke dafür. Die Gründe für die Nichtübereinstimmung in der docx-Datei sind in den Metadateninformationen enthalten. Jedes Mal, wenn wir eine doc / docx-Datei erstellen, ändert sich der Zeitstempel. Obwohl ich versucht habe, den Zeitstempel (Zugriff, Änderung und Erstellung) beider Dateien zu ändern, um sie gleich zu machen und zu vergleichen, was nicht funktioniert hat. Abgesehen von diesen Zeitstempeln gibt es eine Meta-Information namens Zip Modify Date, die nicht sichtbar ist, wenn wir die Dateieigenschaften sehen. Dieser Zeitstempel wurde als einer der Gründe für die Nichtübereinstimmung des Hashcodes gefunden. Außerdem waren die Base64-codierten Zeichenfolgen aufgrund des Zip-Zeitstempels unterschiedlich.
Die Optionen, die ich für den Vergleich verwenden musste, waren:
1. converting the docx file to xml file
2. Zip the docx file, unzip it and iterate though all the xml files to find the hashcode and compare the hascodes.(suggeted as of the answers)
"2" war gut, aber es waren viele Iterationen erforderlich, und durch das Entpacken wurden viele Ordner erstellt.
"1" war gerade fwd, als ich es mit externer lib -> docx4j versuchte, die das docx in xml konvertierte und dann konnte ich den Hashcode abgleichen, es funktionierte.
Konvertieren Sie DOCX in eine XML-Datei
Ich musste verschiedene Optionen ausprobieren, da ich nach der einfachsten und nicht so komplexen Möglichkeit suchte, Inhalte und Stile des Word-Dokuments zu vergleichen.