Сравните два документа на Java
У меня есть два текстовых документа, которые я пытаюсь сравнить в java. Я пробовал использовать
md5 хэш-код
HashCode newFile = Files.asByteSource(newFileInput).hash(Hashing.md5());
HashCode oldFile = Files.asByteSource(oldFileInput).hash(Hashing.md5());
а также используя,
логическое isEqual = FileUtils.contentEquals (oldFile, newFile);
Несмотря на то, что содержимое одинаково, сравнив его с помощью онлайн-инструментов и вне всякого сравнения, хэш-код в обоих вышеупомянутых методах имеет MISMATCH.
любые решения? или способ сравнить любой тип файла с помощью любого API в Java. Мне нужно провести глубокое сравнение между двумя файлами слов, например, для пробелов, шрифтов, содержимого. и т.д..
Ожидаемый результат: оба файла должны совпадать
Ответы
Даже если оба ваших документа выглядят одинаково или даже если оба содержат одинаковый форматированный контент, небольшое изменение, например, дата последнего изменения, приведет к неудачному сравнению. Документы JSON легче сравнивать, но документы Word являются двоичными. Малейшее изменение может полностью изменить документ.
Таким образом, вы должны сделать это трудным путем: найти библиотеку, чтобы самостоятельно прочитать содержимое файлов Word и специально проверить содержимое обоих файлов.
На мой вопрос было несколько предложений и ответов, спасибо за это. Причины несоответствия в файле docx указаны в информации метаданных, каждый раз, когда мы создаем файл doc / docx, метка времени изменяется. Хотя я пытался изменить метку времени (доступ, изменение и создание) обоих файлов, чтобы сделать их одинаковыми и сравнить, что не сработало. Причина в том, что помимо этих отметок времени существует метаинформация под названием Zip Modify Date, которая не видна, когда мы видим свойства файла. эта временная метка, которую я нашел, является одной из причин несоответствия в хэш-коде. Кроме того, строки в кодировке base64 отличались из-за временной метки ZIP.
Итак, варианты, которые мне нужно было провести для сравнения, были:
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, так как я пробовал использовать внешнюю библиотеку -> docx4j, которая преобразовывала docx в xml, а затем я мог сопоставить хэш-код, это сработало.
Конвертировать DOCX в файл XML
Мне пришлось попробовать разные варианты, так как я искал самый простой и не такой сложный способ сравнить содержимое и стили текстового документа.