2016-06-14 7 views
0

Java의 바이트 배열에서 .doc 또는 .docx 파일을 읽으려고합니다.MS Word에서 파일을 다시 저장할 때마다 Java에서 .doc 또는 .docx 파일의 바이트 배열이 변경되는 이유는 무엇입니까?

Path file_path = Paths.get("D:\\", "myname3.doc"); 
    byte[] ByteArray= Files.readAllBytes(file_path); 
    for(byte b : ByteArray){ 
     System.out.print(b); 
    } 

코드 잘 작동하고 나는 바이트 배열을받을 - : 나는 가장 단순한 수준에서 아파치 POI, 티카, doc4j 등 코드와 같은 제 3 자 API를 사용하기를 기대하고 있지 않다 같습니다. 그러나 MS Word에서 동일한 파일을 다시 열 때 변경하지 않고 같은 내용으로 동일한 드라이브에 다시 저장하면 수신하는 바이트 배열이 완전히 다릅니다. 수정 된 시간과 관련된 MetaData의 차이점은 있지만 바이트 배열은 파일의 전체 내용이 변경된 것처럼 완전히 다릅니다. (두 반복의 바이트 배열을 포함하는 텍스트 파일 첨부). Difference in Byte Array

제 3 자 API를 사용하지 않고도 해결책이 있습니까?

참고 : - MS 웹 사이트에서 제공 한 Word 인코딩 형식을 통과했으며, 경우에 따라 엔디안 문제를 검토했습니다. 또한 FileInputStreamReader를 통해 파일 읽기를 시도했습니다.

참고 : -이 프로그램은 ASCII 형식의 텍스트 파일에 잘 작동합니다.

EDIT 1 : 질문을 맑게 만드십시오. dfferent 이름으로 같은 위치에 두 번 저장된 .docx 파일을 읽을 때 바이트 배열은 위의 프로그램을 사용하여 파일을 읽을 때 완전히 다릅니다. 나는 그 이유를 알고 싶다.

EDIT 2 : - 내가 OffVis 도구에서 파일을 읽으려고 시도했습니다. 또한 원시 바이트가 다릅니다.

+1

무엇이 문제입니까? 분명하지 않다. –

+0

두 바이트 배열을 디스크에 다시 저장하고 두 파일이 열리고 내용이 동일한 지 확인하십시오. – tfosra

+0

바이트 배열을 char 형식으로 변환해야하므로 바이트가 변환되기 때문에 내용이 동일하지 않습니다 char. @tfosra –

답변

1

.docx에 대한 설명은 분명히 zipped, XML-based file format입니다. 압축 된 파일이기 때문에 기본 파일 중 하나에서 약간의 변경으로 인해 아카이브 파일의 비트가 전체적으로 크게 변경 될 수 있습니다.

왜 문서에서 발생하는지 잘 모르겠습니다.

+0

Doc 파일을 사용하려고 시도했지만 바이트 배열이 다릅니다. –

0

.Doc 파일은 매번 동일한 바이트 배열을 생성합니다. 대답에 명시된 바와 같이 .docx 파일은 압축 된 OOXML 파일이므로 officeVis를 통해 바이너리를 검색 할 때 일부 추가 바이트가 추가되어 전체 바이트 배열이 이동되거나 변경되었습니다. 또 하나의 관찰은 내 시스템에 .doc 파일을 암호화하는 보안 응용 프로그램이 있기 때문에 보안 응용 프로그램이없는 스마트 폰을 통해 파일을 읽었을 때 모두 정상적으로 작동했습니다.

도움 주셔서 감사합니다.