无法使用 FileOutputStream 在一个合并文件中显示 2 个文件的内容,而只是显示第一个文件的内容
Not able to display content of 2 files in one merged file by using FileOutputStream, instead it just shows content from first file
我正在尝试读取字节数组中的 2 个 docx 文件,并尝试使用 FileOutputStream
将其写入一个 docx 文件中。以下是我在 groovy 和 grails.
中使用的代码片段
byte[] firstFile = Files.readAllBytes(Paths.get("D:/MyDoc/firstFile.docx"));
byte[] secFile = Files.readAllBytes(Paths.get("D:/MyDoc/secFile.docx"));
FileOutputStream f = new FileOutputStream(new File("D:/MyDoc/mergedFile.docx"));
f.write(firstFile);
f.write(secFile);
f.close();
问题是文件大小增加了,但合并文件中的内容仅来自第一个文件。相同的代码适用于 txt 文件,但不适用于 docx 文件。
我认为这应该是一些 display/formatting 问题,这就是为什么它没有显示第二个文件内容的原因。
那是因为docx不是一种简单的文件格式。对于原始数据,第二个文件的数据附加到第一个文件。但是Word会读取文件开头的header信息,也就是第一个文件的header信息,只解释第一个文件。那是因为 header 中有一部分告诉单词文档有多大。
并且 word 只会读取定义的文档长度,而忽略其他所有内容。
一些小例子:
File1.docx
<HEADER>
FILE_SIZE=3
<BODY>
1
2
3
File2.docx
<HEADER>
FILE_SIZE=2
<BODY>
1
2
如果你把两者结合起来,你会得到:
<HEADER>
FILE_SIZE=3
<BODY>
1
2
3
<HEADER>
FILE_SIZE=2
<BODY>
1
2
但 Word 将从顶部开始解释此文件。并且在读取 header 和文件只有 3 行长的信息后,它会在第一个文件后停止。
这个例子当然是大大简化了!!!
如果您真的想在 java 中使用 docx 文件,您应该使用能够理解 word 格式并适当处理它的库。喜欢DOCX4J or Apache POI
我正在尝试读取字节数组中的 2 个 docx 文件,并尝试使用 FileOutputStream
将其写入一个 docx 文件中。以下是我在 groovy 和 grails.
byte[] firstFile = Files.readAllBytes(Paths.get("D:/MyDoc/firstFile.docx"));
byte[] secFile = Files.readAllBytes(Paths.get("D:/MyDoc/secFile.docx"));
FileOutputStream f = new FileOutputStream(new File("D:/MyDoc/mergedFile.docx"));
f.write(firstFile);
f.write(secFile);
f.close();
问题是文件大小增加了,但合并文件中的内容仅来自第一个文件。相同的代码适用于 txt 文件,但不适用于 docx 文件。
我认为这应该是一些 display/formatting 问题,这就是为什么它没有显示第二个文件内容的原因。
那是因为docx不是一种简单的文件格式。对于原始数据,第二个文件的数据附加到第一个文件。但是Word会读取文件开头的header信息,也就是第一个文件的header信息,只解释第一个文件。那是因为 header 中有一部分告诉单词文档有多大。 并且 word 只会读取定义的文档长度,而忽略其他所有内容。
一些小例子:
File1.docx
<HEADER>
FILE_SIZE=3
<BODY>
1
2
3
File2.docx
<HEADER>
FILE_SIZE=2
<BODY>
1
2
如果你把两者结合起来,你会得到:
<HEADER>
FILE_SIZE=3
<BODY>
1
2
3
<HEADER>
FILE_SIZE=2
<BODY>
1
2
但 Word 将从顶部开始解释此文件。并且在读取 header 和文件只有 3 行长的信息后,它会在第一个文件后停止。
这个例子当然是大大简化了!!!
如果您真的想在 java 中使用 docx 文件,您应该使用能够理解 word 格式并适当处理它的库。喜欢DOCX4J or Apache POI