Java多word文件生成后进行压缩并导出下载后,压缩文件损坏并提示“不可预料的压缩文件末端”和“CRC校验失败”

WinRAR 打开情况:
提示不可预料的压缩文件末端,实际情况是两个word文件,但是只显示了一个word文件,并无法打开word文件,提示“压缩文件已损坏”

好压 打开情况:
提示不可预料的压缩文件末端,word文件数量显示正确,并可以正常打开,因为好压自带了压缩文件损坏修复功能,WinRAR则需手动在菜单栏-工具-修复压缩文件进行修复即可正常使用

7-zip 打开情况:
可以打开,文件数量显示正常,可以看到图中第一个word文件的大小为0,此时打开该文件会提示“CRC校验失败”,第二个word文件可以正常打开。

问题分析:
在代码中,把事先生成好的多个文件逐步写入zip中,如果代码中没有编写zip的写入完成状态,那么就会出现此问题,通过图三分析可以推测出,只有一个word大小为0,其他的文件大小是正常的,经过断点调试发现总是最后一个文件压缩后大小显示为0,说明流的关闭完成环节出了问题

解决方案
在多文件写入zip文件,必须增加ZipOutputStream的finish()方法,例如:
(如果只是单个文件,只是用zipOutputStream.close()没有使用zipOutputStream.finish()也没有出现问题)

OutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zipOutputStream =  new ZipOutputStream(bos);
ByteArrayOutputStream output = new ByteArrayOutputStream();//ByteArray临时存储流//此处documentMap是一个hashMap,Key值为文件名称,Value是对应XWPFDocument文件信息
Iterator<Map.Entry<String, XWPFDocument>> docIterator = documentMap.entrySet().iterator();
while (docIterator.hasNext()) {Map.Entry<String, XWPFDocument> entry = docIterator.next();XWPFDocument doc = entry.getValue();String key = entry.getKey();//如果对应的XWPFDocument文件信息不为空则写入到zip中if (null != doc) {//开始写入文件ZipEntry zipEntry = new ZipEntry(key +".docx");zipOutputStream.putNextEntry(zipEntry);output.reset();//重置ByteArray流(为了重复使用)doc.write(output);//把word对象内容写到ByteArray流临时存储doc.close();zipOutputStream.write(output.toByteArray());//把ByteArray流内容写入zip输出流zipOutputStream.closeEntry();}
}
output.close();
//结束写入文件
zipOutputStream.finish();

参考方法:http://www.look-overs.com/614/.html

Java多word文件生成后进行压缩并导出下载后,压缩文件损坏并提示“不可预料的压缩文件末端”和“CRC校验失败”相关推荐

  1. JAVA实现模板word文档导入,Java依据word模板生成word文档之后台解析和实现及部分代码(一)...

    Java根据word模板生成word文档之后台解析和实现及部分代码(一) 后台主要工作是解析XML定义的标签文件,并获取到数据集,放入到Map中,然后调用Jacob.jar中提供的相关方法来实现替换. ...

  2. Visio直接粘贴进Word的矢量图,采用Adobe导出PDF后图片内容存在缺失的解决方案;  打印生成PDF,字体的加粗效果会很不明显的解决方案;

    问题一    Visio直接粘贴进Word的矢量图,采用Adobe导出PDF后图片内容存在缺失 目标效果: 但是导成PDF后字总是消失,成了 调整Visio内容没用,尝试各种网上办法没用.师妹的福昕可 ...

  3. winrar CRC校验失败,文件被破坏的解决办法

    昨天下载了一个将近一G的软件,在解压时,提示"CRC校验失败,文件被破坏",不至于再重新下载吧,需要四个多小时呢,网上的方法也试了好多种,都不好用...      我采用的方法很简 ...

  4. WINRAR -- CRC校验失败,文件被破坏

    下载了一个将近一G的软件,在解压时,提示"CRC校验失败,文件被破坏",不至于再重新下载吧,需要好几个小时,这是用以下的办法通常可以不用理会rar的警告,把能解压的都解压出来. 办 ...

  5. Java根据word模板生成word文档并转成PDF文件

    1. 处理word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化 生成的xml ...

  6. java 根据word模板生成word文件

    Java可以使用Apache POI库来生成Word文件,并且也可以使用freemarker等模板引擎来实现根据Word模板生成Word文件的功能. 下面是一个简单的示例代码,可以帮助您快速入门. 模 ...

  7. java根据word模板生成pdf

    java根据word模板动态赋值某些字段,然后生成pdf,参考文档:http://deepoove.com/poi-tl/#_why_poi_tl

  8. JAVA根据word模板生成合同,并能实现网页在线浏览/打印/下载

    最近, 项目有这样一个需求:       根据我选择的模板(docx文件),和我表单填的数据,生成相应的合同文件(docx),该合同要能网页在线浏览/打印/下载在合同中还要放置签字图片和身份证图片 我 ...

  9. JAVA Freemarker + Word 模板 生成 Word 文档 (变量替换,数据的循环,表格数据的循环,以及图片的东替换)...

    1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...

最新文章

  1. 死锁产生的原因和解锁的方法
  2. asyncawait
  3. 请收下这份NLP热门词汇解读
  4. 10个堪称神器的学习网站
  5. 华为云AI开发部总经理罗华霖:华为人工智能的实践与创新
  6. 使用idea对生产环境的JAVA应用进行远程调试
  7. Intent对象详解(二)
  8. 十二、“最是真心藏不住,一言一语总关情。”(2021.2.11)
  9. 【Python CheckiO 题解】Army Battles
  10. 转载 Spark性能优化指南——基础篇
  11. 从JVM入手,聊聊Java的学习和复习!
  12. 2020-我的后端开发秋招之路
  13. 软件需求说明书(GB856T—88)
  14. 单片机复位电路基础知识解析
  15. Quora cqa问题抓取
  16. python format 用法详解
  17. 如何遮挡电影英汉字幕
  18. Android 头像定位图标
  19. 马桶的尺寸是多少 马桶尺寸是多大2022
  20. STM32F407VET6 / BLACK_F407VE开发板间隔0.5秒不断重启

热门文章

  1. 临时表与SELECT INTO、INSERT INTO SELECT
  2. 光照强度传感器BH1750
  3. [项目]用C++实现的壳(扩展版)
  4. 12306登录password参数加密逻辑
  5. 20220413安装旧版本的百度网盘的方法
  6. C/C++ 链 表 头插法 尾插法
  7. CVPR2019|Depth-Aware Video Frame Interpolation【论文阅读笔记】
  8. 病毒木马查杀实战第023篇:MBR病毒之引导区的解析
  9. 示波器基本原理1:模拟示波器
  10. DNS服务器的作用 路由器的功能,dns服务器是什么意思 dns服务器主要功能有哪些...