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

2022-10-17,,,,

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

下载本文的Word格式文档,以方便收藏与打印。