簡體   English   中英

為什么Java中的.doc或.docx文件的字節數組每次在MS Word中再次保存時都會更改?

[英]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工具中讀取文件,此外,原始字節也不同。

對於.docx可以肯定地解釋這一點,它只是一個基於XML壓縮文件格式 由於它是壓縮文件,因此其中一個基礎文件中的微小更改會在全局范圍內極大地更改存檔文件的位。

不確定為什么會在doc中發生。

.Doc文件每次都會產生相同的字節數組。 如答案中所述,.docx文件是一個壓縮的OOXML文件,因此,當我嘗試通過officeVis查找二進制文件時,添加了一些額外的字節,因此整個字節數組被移位或更改。 另一個觀察結果是,我的系統中有一個安全應用程序正在加密.doc文件,因此,當我嘗試通過智能手機(不具有安全應用程序)讀取文件時,一切正常。

謝謝您的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM