So sánh hai tài liệu trong Java
Tôi có hai tài liệu từ mà tôi đang cố gắng so sánh trong java. Tôi đã thử sử dụng
mã băm md5
HashCode newFile = Files.asByteSource(newFileInput).hash(Hashing.md5());
HashCode oldFile = Files.asByteSource(oldFileInput).hash(Hashing.md5());
và cũng đang sử dụng,
boolean isEqual = FileUtils.contentEquals (oldFile, newFile);
Mặc dù nội dung giống nhau, so sánh nội dung bằng cách sử dụng các công cụ trực tuyến và hơn thế nữa so sánh, vẫn có mã băm trong cả hai phương pháp trên có dạng MISMATCH.
bất kỳ giải pháp? hoặc cách so sánh bất kỳ loại tệp nào bằng cách sử dụng bất kỳ API nào trong Java. tôi cần so sánh sâu giữa hai tệp word như về khoảng trắng, phông chữ, nội dung. Vân vân..
Kết quả mong đợi: Cả hai tệp phải khớp
Trả lời
Ngay cả khi cả hai tài liệu của bạn trông giống nhau hoặc thậm chí nếu cả hai đều chứa nội dung được định dạng giống nhau, thì một chút thay đổi như ngày sửa đổi cuối cùng sẽ dẫn đến việc so sánh không thành công. Tài liệu JSON dễ so sánh hơn nhưng tài liệu Word là hệ nhị phân. Thay đổi nhỏ nhất có thể thay đổi tài liệu hoàn toàn.
Vì vậy, bạn phải thực hiện theo cách khó: Tìm thư viện để tự đọc nội dung của các tệp Word và kiểm tra cụ thể nội dung của cả hai tệp.
Có nhiều gợi ý và câu trả lời cho câu hỏi của tôi, cảm ơn vì điều đó. Lý do cho sự không khớp trong tệp docx là có trong thông tin siêu dữ liệu, mỗi khi chúng tôi tạo tệp doc / docx, dấu thời gian sẽ thay đổi. Mặc dù tôi đã cố gắng thay đổi dấu thời gian (được truy cập, sửa đổi và tạo) của cả hai tệp để làm cho nó giống nhau và so sánh, nhưng không hiệu quả. Lý do là ngoài những dấu thời gian này, có một thông tin meta được gọi là Zip Modify Date, không hiển thị khi chúng ta thấy thuộc tính tệp. dấu thời gian này mà tôi đã tìm thấy là một trong những lý do khiến mã băm không khớp. Ngoài ra, các chuỗi được mã hóa base64 khác nhau do dấu thời gian zip.
Vì vậy, các tùy chọn tôi phải thực hiện so sánh là:
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" là tốt nhưng nó yêu cầu nhiều lần lặp lại và việc giải nén sẽ tạo ra rất nhiều thư mục.
"1", là fwd thẳng, khi tôi đã thử nó bằng cách sử dụng bên ngoài lib -> docx4j, chuyển đổi docx thành xml và sau đó tôi có thể khớp với mã băm, nó đã hoạt động.
Chuyển đổi DOCX sang tệp XML
Tôi đã phải thử các tùy chọn khác nhau vì tôi đang tìm cách đơn giản nhất và không quá phức tạp để so sánh nội dung và kiểu của tài liệu word.