Confronta due documenti in Java
Ho due documenti di parole che sto cercando di confrontare in Java. Ho provato a usare
hashcode md5
HashCode newFile = Files.asByteSource(newFileInput).hash(Hashing.md5());
HashCode oldFile = Files.asByteSource(oldFileInput).hash(Hashing.md5());
e anche usando,
booleano isEqual = FileUtils.contentEquals (oldFile, newFile);
Anche se i contenuti sono gli stessi, confrontati con il contenuto utilizzando strumenti online e senza paragoni, il codice hash in entrambi i metodi sopra indicati risulta MISMATCH.
qualche soluzione? o un modo per confrontare qualsiasi tipo di file utilizzando qualsiasi API in Java. devo fare un confronto approfondito tra due file di parole come per spazi, caratteri, contenuto. eccetera..
Risultato previsto: entrambi i file devono corrispondere
Risposte
Anche se entrambi i documenti hanno lo stesso aspetto o anche se entrambi contengono lo stesso contenuto formattato, una leggera modifica come la data dell'ultima modifica risulterà in un confronto non riuscito. I documenti JSON sono più facili da confrontare, ma i documenti di Word sono binari. La più piccola modifica può cambiare completamente il documento.
Quindi devi farlo nel modo più duro: trova una libreria per leggere il contenuto dei file di Word da solo e controlla il contenuto di entrambi i file in modo specifico.
C'erano più suggerimenti e risposte alla mia domanda, grazie per questo. Le ragioni della mancata corrispondenza nel file docx sono presenti nelle informazioni sui metadati, ogni volta che creiamo un file doc / docx, il timestamp cambia. Anche se ho provato a cambiare il timestamp (accesso, modifica e creazione) di entrambi i file per renderlo uguale e confrontare, il che non ha funzionato. Il motivo è che a parte questi timestamp, c'è una meta info chiamata Zip Modify Date, che non è visibile quando vediamo le proprietà del file. questo timestamp l'ho trovato come uno dei motivi per cui c'era una mancata corrispondenza nel codice hash. Inoltre, le stringhe con codifica base64 erano diverse a causa del timestamp zip.
Quindi, le opzioni che avevo per fare il confronto erano:
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" era buono ma richiedeva molte iterazioni e la decompressione avrebbe creato molte cartelle.
"1", era diretto fwd, poiché l'ho provato usando lib esterno -> docx4j, che ha convertito il docx in xml e quindi ho potuto abbinare l'hashcode, ha funzionato.
Converti DOCX in file XML
Ho dovuto provare diverse opzioni poiché cercavo il modo più semplice e non così complesso per confrontare il contenuto e gli stili del documento word.