之前我是这样写的
/* 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版权协议,转载请附上原文出处链接和本声明。