【发布时间】:2016-06-14 15:57:08
【问题描述】:
我正在尝试在 Java 中读取字节数组中的 .doc 或 .docx 文件。我不期待使用任何第三方 API,如 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 中再次打开同一个文件时,没有进行任何更改,而是以相同的内容再次将其保存在同一个驱动器中,我收到的字节数组完全不同。我知道存在与修改时间有关的元数据差异,但字节数组完全不同,好像文件的全部内容已更改。 (附加包含两个迭代的字节数组的文本文件)。 Difference in Byte Array
是否有不使用第三方 API 的解决方案?
注意:- 我已经查看了 MS 网站上给出的 Word 编码格式,并且还查看了字节顺序问题以防万一。还尝试通过 FileInputStreamReader 读取文件。
注意:- 此程序适用于 ASCII 格式的文本文件。
编辑 1:- 只是为了使问题清晰。当我读取以不同名称保存在同一位置两次的 .docx 文件时,当我使用上述程序读取文件时,字节数组完全不同。我想知道这背后的原因。
编辑 2:- 我尝试在 OffVis 工具中读取文件,但原始字节也不同。
【问题讨论】:
-
问题是什么?不清楚。
-
尝试再次将两个字节数组保存到磁盘上,看看这两个文件是否会打开,它们的内容是否相同
-
由于我必须将字节数组转换为 char 格式,因此内容将不一样,因为字节已转换为 char。 @tfosra
-
不,您不必将每个字节保存为 char,而是使用 ByteArrayOutputStream 中的字节数组将所有数据保存回另一个物理文件。也可以使用
Files.write(...)方法 -
在 byteArrayOutputStream 中存储字节数组,然后将其写入另一个文件只不过是将字节从一个文件复制到另一个文件。当我每次接收不同的字节数组时,如果我将它们复制到另一个文件,数组的内容不会改变。
标签: java file bytearray streamreader doc