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 ();这段代码时出现错误:

ZIP() 函数

Linux的压缩命令(tar,gzip,zip)

python爬虫同时输出两个列表(zip函数)

poi 3.8生成excel2007时,debug到Workbook wb =new XSSFWorkbook();这一行报错

20170419 zip函数