[英]Why byte array of .doc or .docx file in Java changes everytime the file is saved again in MS Word?
我正在嘗試在Java中讀取字節數組中的.doc或.docx文件。 我不希望使用任何第三方APis,例如Apache POI,TIKA,doc4j等。最簡單的代碼是:-
Path file_path = Paths.get("D:\\", "myname3.doc");
byte[] ByteArray= Files.readAllBytes(file_path);
for(byte b : ByteArray){
System.out.print(b);
}
代碼工作正常,我收到了字節數組。 但是,當我再次在MS Word中打開同一文件時,沒有進行任何更改,而是再次將其保存在具有相同內容的同一驅動器中時,我收到的字節數組完全不同。 我知道存在與修改時間有關的MetaData差異,但是字節數組完全不同,就好像文件的整個內容已更改一樣。 (附加包含兩個迭代的字節數組的文本文件)。 字節數組的差異
有沒有使用第三方API的解決方案?
注意:-我已經瀏覽了MS網站上給出的Word編碼格式,並且還研究了字節序問題,以防萬一。 還嘗試通過FileInputStreamReader讀取文件。
注意:-該程序對於ASCII格式的文本文件運行正常。
編輯1:-只是為了使問題更清楚。 當我讀取.docx文件時,該文件以不同的名稱保存在同一位置兩次,當我使用上述程序讀取文件時,字節數組完全不同。 我想知道這背后的原因。
編輯2:-我嘗試在OffVis工具中讀取文件,此外,原始字節也不同。
.Doc文件每次都會產生相同的字節數組。 如答案中所述,.docx文件是一個壓縮的OOXML文件,因此,當我嘗試通過officeVis查找二進制文件時,添加了一些額外的字節,因此整個字節數組被移位或更改。 另一個觀察結果是,我的系統中有一個安全應用程序正在加密.doc文件,因此,當我嘗試通過智能手機(不具有安全應用程序)讀取文件時,一切正常。
謝謝您的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.