Java'da iki belgeyi karşılaştırın
Java ile karşılaştırmaya çalıştığım iki kelimelik belgelerim var. Kullanmayı denedim
md5 hashcode
HashCode newFile = Files.asByteSource(newFileInput).hash(Hashing.md5());
HashCode oldFile = Files.asByteSource(oldFileInput).hash(Hashing.md5());
ve ayrıca
boolean isEqual = FileUtils.contentEquals (eskiFile, yeniFile);
İçerikler aynı olsa da, çevrimiçi araçları kullanarak içerikle kıyaslandığında ve karşılaştırmanın ötesinde, yine de yukarıdaki her iki yöntemdeki karma kod MISMATCH olarak gelir.
herhangi bir çözüm? veya herhangi bir dosya türünü Java'daki herhangi bir API kullanarak karşılaştırmanın yolu. boşluklar, yazı tipleri, içerik gibi iki kelime dosyası arasında derinlemesine karşılaştırma yapmam gerekiyor. vb..
Beklenen Sonuç: Her iki dosya da eşleşmelidir
Yanıtlar
Her iki belgeniz de aynı görünse veya her ikisi de aynı biçimlendirilmiş içeriği içerse bile, son değiştirilme tarihi gibi küçük bir değişiklik, başarısız bir karşılaştırmaya neden olacaktır. JSON belgelerini karşılaştırmak daha kolaydır, ancak Word belgeleri ikilidir. En küçük değişiklik belgeyi tamamen değiştirebilir.
Yani bunu zor yoldan yapmalısınız: Word dosyalarının içeriğini kendi başınıza okumak için bir kitaplık bulun ve her iki dosyanın içeriğini özel olarak kontrol edin.
Sorum için çok sayıda öneri ve cevap vardı. Docx dosyasındaki uyuşmazlığın nedenleri meta veri bilgilerinde bulunur, her doc / docx dosyası oluşturduğumuzda zaman damgası değişir. Her iki dosyanın zaman damgasını (erişilen, değiştirilen ve oluşturulan) aynı yapmak ve karşılaştırmak için değiştirmeye çalışsam da, bu işe yaramadı. Nedeni, bu zaman damgalarından ayrı olarak, Dosya özelliklerini gördüğümüzde görünmeyen Zip Değiştirme Tarihi adlı bir meta bilgi var. hashcode'da uyumsuzluğun nedenlerinden biri olarak bulduğum bu zaman damgası. Ayrıca, base64 kodlu dizeler, zip zaman damgası nedeniyle farklıydı.
Dolayısıyla, karşılaştırmayı yapmam gereken seçenekler şunlardı:
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" iyiydi, ancak çok sayıda yineleme gerektiriyordu ve sıkıştırmanın açılması birçok klasör oluşturacaktı.
"1" düz fwd idi, çünkü onu harici lib -> docx4j kullanarak denedim, bu docx'i xml'ye dönüştürdü ve sonra karma kodu eşleştirebildim, işe yaradı.
DOCX'i XML dosyasına dönüştürün
Word belgesinin içeriğini ve stillerini karşılaştırmak için en basit ve çok karmaşık olmayan bir yol aradığım için farklı seçenekleri denemek zorunda kaldım.