码迷,mamicode.com
首页 > 其他好文 > 详细

XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法

时间:2019-08-13 10:29:50      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:and   random   file   错误   代码   close   response   try   ons   

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资源流自动关闭处理办法

标签:and   random   file   错误   代码   close   response   try   ons   

原文地址:https://www.cnblogs.com/bradcai/p/11344247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!