欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-05 08:28:15
XSSFWorkbook对象的write方法内会将传入的资源流自动关闭 导致下载excel失败 错误代码 解决方法: 将XSSFWorkbook转换成ByteArrayOutputStream,用ByteArrayOutputStream对象将流写入zip对象中 ......

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