Java에서 두 문서 비교

Oct 16 2020

Java에서 비교하려는 두 단어 문서가 있습니다. 나는 사용해 보았다

md5 해시 코드

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

또한 사용하여

부울 isEqual = FileUtils.contentEquals (oldFile, newFile);

내용이 같더라도 온라인 도구를 사용하여 내용을 비교하고 비교할 수 없지만 위 두 방법의 해시 코드는 여전히 MISMATCH로 제공됩니다.

어떤 해결책? 또는 Java의 API를 사용하여 모든 파일 유형을 비교하는 방법. 공백, 글꼴, 내용과 같이 두 단어 파일을 자세히 비교해야합니다. 기타..

예상 결과 : 두 파일이 일치해야합니다.

답변

2 Milgo Oct 16 2020 at 12:41

두 문서가 동일하게 보이거나 둘 다 동일한 형식의 콘텐츠를 포함하더라도 마지막 수정 날짜와 같이 약간 변경하면 비교가 실패합니다. JSON 문서는 비교하기가 더 쉽지만 Word 문서는 바이너리입니다. 조금만 변경해도 문서가 완전히 변경 될 수 있습니다.

따라서 어려운 방법으로해야합니다. Word 파일의 내용을 직접 읽을 라이브러리를 찾고 두 파일의 내용을 구체적으로 확인하십시오.

backToStack Oct 21 2020 at 16:38

제 질문에 대한 여러 가지 제안과 답변이있었습니다. 감사합니다. docx 파일의 불일치 이유는 메타 데이터 정보에 있으며 doc / docx 파일을 만들 때마다 타임 스탬프가 변경됩니다. 두 파일의 타임 스탬프 (액세스, 수정 및 생성)를 변경하여 동일하게 만들고 비교하려고 시도했지만 작동하지 않았습니다. 그 이유는 이러한 타임 스탬프를 제외하고 Zip Modify Date라는 메타 정보가 있는데, 파일 속성을 볼 때 보이지 않습니다. 이 타임 스탬프는 해시 코드가 일치하지 않는 이유 중 하나로 발견되었습니다. 또한 zip 타임 스탬프 때문에 base64로 인코딩 된 문자열이 달랐습니다.

그래서 비교를해야하는 옵션은 다음과 같습니다.

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"은 외부 lib-> docx4j를 사용하여 시도 했으므로 docx를 xml로 변환 한 다음 해시 코드와 일치시킬 수 있었기 때문에 곧바로 작동했습니다.

DOCX를 XML 파일로 변환

단어 문서의 내용과 스타일을 비교하는 가장 간단하고 복잡하지 않은 방법을 찾고 있었기 때문에 다른 옵션을 시도해야했습니다.