当前位置: 移动技术网 > IT编程>开发语言>Java > XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法

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

2019年08月13日  | 移动技术网IT编程  | 我要评论

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();

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网