जावा में दो दस्तावेजों की तुलना करें

Oct 16 2020

मेरे पास दो शब्द दस्तावेज़ हैं जो मैं जावा में तुलना करने की कोशिश कर रहा हूं। मैंने प्रयोग करने की कोशिश की

md5 हैशकोड

HashCode newFile = Files.asByteSource(newFileInput).hash(Hashing.md5());
HashCode oldFile = Files.asByteSource(oldFileInput).hash(Hashing.md5());

और भी,

बूलियन isEqual = FileUtils.contentEquals (oldFile, newFile);

भले ही सामग्री समान हो, ऑनलाइन टूल का उपयोग करने वाली सामग्री की तुलना में और तुलना से परे, फिर भी उपरोक्त दोनों विधि में हैशकोड MISCATCH के रूप में आता है।

कोई समाधान? या जावा में किसी भी एपीआई का उपयोग करके किसी भी फ़ाइल प्रकार की तुलना करने का तरीका। मुझे रिक्त स्थान, फ़ॉन्ट, सामग्री के लिए दो शब्द फ़ाइलों के बीच गहरी तुलना करने की आवश्यकता है। आदि..

अपेक्षित परिणाम: दोनों फ़ाइल का मिलान होना चाहिए

जवाब

2 Milgo Oct 16 2020 at 12:41

यहां तक ​​कि अगर आपके दोनों दस्तावेज़ एक जैसे दिखते हैं या भले ही दोनों में एक ही स्वरूपित सामग्री हो, लेकिन अंतिम संशोधित तिथि जैसे थोड़े से बदलाव से असफल तुलना हो जाएगी। JSON दस्तावेज़ों की तुलना करना अधिक आसान है लेकिन Word दस्तावेज़ द्विआधारी हैं। सबसे छोटा परिवर्तन दस्तावेज़ को पूरी तरह से बदल सकता है।

तो आपको इसे कठिन तरीके से करना होगा: वर्ड फ़ाइलों की सामग्री को खुद से पढ़ने और दोनों फाइलों की सामग्री को विशेष रूप से जांचने के लिए एक पुस्तकालय का पता लगाएं।

backToStack Oct 21 2020 at 16:38

मेरे सवाल के कई सुझाव और जवाब थे, इसके लिए धन्यवाद। Docx फ़ाइल में मिसमैच के कारण मेटाडेटा जानकारी में होते हैं, हर बार हम एक doc / docx फ़ाइल बनाते हैं, टाइमस्टैम्प बदलता है। हालाँकि मैंने इसे बनाने के लिए दोनों फाइलों के टाइमस्टैम्प (एक्सेस किए गए, संशोधित और निर्मित) को एक ही तरह से बदलने और तुलना करने की कोशिश की, जो काम नहीं किया। इसका कारण इन समय टिकटों के अलावा है, ज़िप संशोधित तिथि नामक एक मेटा जानकारी है, जो फ़ाइल गुणों को देखने पर दिखाई नहीं देती है। इस टाइमस्टैम्प मैं एक कारण के रूप में हैशकोड में बेमेल पाया गया था। इसके अलावा, जिप टाइमस्टैम्प के कारण बेस 64 एनकोडेड स्ट्रिंग्स अलग थे।

इसलिए, तुलना करने के लिए मेरे पास विकल्प थे:

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" अच्छा था, लेकिन इसमें बहुत सारे पुनरावृत्तियों की आवश्यकता थी और अनज़िपिंग बहुत सारे फ़ोल्डर्स बनाएगी।

"1", सीधे fwd था, जैसा कि मैंने बाहरी lib -> docx4j का उपयोग करके इसे आज़माया, जिसने docx को xml में बदल दिया और फिर मैं हैशकोड से मिलान कर सका, यह काम किया।

DOCX को XML फ़ाइल में बदलें

मुझे विभिन्न विकल्पों की कोशिश करनी थी, क्योंकि मैं सबसे सरल तरीके से देख रहा था और इतने जटिल तरीके से कि शब्द दस्तावेज़ की सामग्री और शैलियों की तुलना नहीं करता था।