[alibaba/easyexcel]无法与ZipOutputStream配合使用,打包时出现异常

2024-05-16 694 views
8

触发Bug的代码

        FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\ggg\\Desktop\\demo.zip");
        ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
        zipOutputStream.putNextEntry(new ZipEntry("a.xlsx"));

        ExcelWriter excelWriter = EasyExcel.write(zipOutputStream).autoCloseStream(false).build();
        for (int i = 0; i <= 10; i++) {
            WriteSheet sheet = EasyExcel.writerSheet(i, "sheet"+i).head(Item.class).build();
            excelWriter.write(items, sheet);

        }
        excelWriter.finish();
        zipOutputStream.closeEntry();   // 这里出现异常 Exception in thread "main" java.io.IOException: Stream closed
        zipOutputStream.close();

异常 Exception in thread "main" java.io.IOException: Stream closed at java.util.zip.ZipOutputStream.ensureOpen(ZipOutputStream.java:97) at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:248) at com.example.Main.main(Main.java:34)

回答

8

@zhuangjiaju 尊敬的开发您好!我有兴趣在接下来的几个月内修复这个bug,请问可以将这个任务分配给我吗?

7
if (!isOutputStreamEncrypt) {
            try {
                if (writeExcel) {
                    writeWorkbookHolder.getWorkbook().write(writeWorkbookHolder.getOutputStream()); 
                }
            } catch (Throwable t) {
                throwable = t;
            }
        }

这个Bug出现在WriteContextImpl.java的339行,调用Workbook对象的write方法时,stream被自动close了,这个write方法应该是POI里的,应该没有办法改:(

6

真的无解 考虑先自己搞成file