XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法
Posted bradcai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法相关的知识,希望对你有一定的参考价值。
XSSFWorkbook对象的write方法内会将传入的资源流自动关闭 导致下载excel失败
错误代码
OutputStream out = response.getOutputStream();
ZipOutputStream zos = new ZipOutputStream(out);
XSSFWorkbook workbook = new XSSFWorkbook();
// 将文件写入zip内,即将文件进行打包
zos.putNextEntry(new ZipEntry(fileName + "(" + UUID.randomUUID() + ")." + typeName));
// 此处将自动关闭zos资源
workbook.wirte(zos);
解决方法: 将XSSFWorkbook转换成ByteArrayOutputStream,用ByteArrayOutputStream对象将流写入zip对象中
OutputStream out = response.getOutputStream();
ZipOutputStream zos = new ZipOutputStream(out);
XSSFWorkbook workbook = new XSSFWorkbook();
// 将文件写入zip内,即将文件进行打包
zos.putNextEntry(new ZipEntry(fileName + "(" + UUID.randomUUID() + ")." + typeName));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
bos.writeTo(zos);
zos.closeEntry();
// 当所有文件打包完成后关闭zos资源
zos.close();
以上是关于XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法的主要内容,如果未能解决你的问题,请参考以下文章
使用最新的POI3.11时,在运行 XSSFWorkbook workBook = new XSSFWorkbook ();这段代码时出现错误:
poi 3.8生成excel2007时,debug到Workbook wb =new XSSFWorkbook();这一行报错