7
触发Bug的代码 org.apache.poi.xssf.streaming.SXSSFSheet#createRow 在这个类因为磁盘控件不足抛出IO异常时
会走到finish中的这个地方
但是在执行的过程中因为这个方法之前,流关闭了导致没有删除临时文件
这里写代码
**提示的异常或者没有达到的效果**
触发Bug的代码 org.apache.poi.xssf.streaming.SXSSFSheet#createRow 在这个类因为磁盘控件不足抛出IO异常时
会走到finish中的这个地方
但是在执行的过程中因为这个方法之前,流关闭了导致没有删除临时文件
这里写代码
**提示的异常或者没有达到的效果**
通过随意写一个100行以上的文件在上述断点处用idea抛一个IOException,就可以触发,猜测是因为流关闭,但是sheet中dispose需要落盘,导致报错没有删除临时文件
是因为这边为false还没有落盘,但是走进去落盘发现流已经在之前被关闭了,我感觉应该在finish里要换个位置com.alibaba.excel.context.WriteContextImpl#finish
org.apache.poi.xssf.streaming.SXSSFSheet#allFlushed 可能在报错的时候需要反射把这个值改成true然后才能删除,不然在磁盘满的情况下flush磁盘的时候还是无法删除临时文件
遇到了同样的问题,当磁盘已满时,这个dispose方法会调用失败,最后导致临时文件无法被清理。