POI通过 Workbook.write() 写入ZipOutputStream对象报流已关闭(Stream closed)的问题

之前我是这样写的

/*      ZipEntry zipEntry = new ZipEntry(scoreTaskEntity.getTeachingClassName() +i+ ".xls");
      zipOut.putNextEntry(zipEntry);
      workBook.write(zipOut);*/
      //zipOut.closeEntry();

第二次循环到 workBook.write(zipOut)时就会报流已关闭的问题:

后来在网上搜索发现

XSSFWorkbook的write()方法传去MemoryStream对象后,会自动关闭传入的参数,导致再次使用putNextEntry()方法是报错Stream closed

解决方法:
将XSSFWorkbook转换成ByteArrayOutputStream,用ByteArrayOutputStream对象将流写入zip对象中

即将以上代码改为

ZipEntry entry = new ZipEntry(scoreTaskEntity.getTeachingClassName()+ ".xls");
zipOut.putNextEntry(entry);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workBook.write(bos);
bos.writeTo(zipOut);

问题完美解决


版权声明:本文为u014071761原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。