[alibaba/easyexcel]poifiles临时文件无法删除

2024-05-10 179 views
7
image

触发Bug的代码 org.apache.poi.xssf.streaming.SXSSFSheet#createRow 在这个类因为磁盘控件不足抛出IO异常时

image

会走到finish中的这个地方

image

但是在执行的过程中因为这个方法之前,流关闭了导致没有删除临时文件

image

这里写代码


**提示的异常或者没有达到的效果**

回答

0

通过随意写一个100行以上的文件在上述断点处用idea抛一个IOException,就可以触发,猜测是因为流关闭,但是sheet中dispose需要落盘,导致报错没有删除临时文件

2
image

是因为这边为false还没有落盘,但是走进去落盘发现流已经在之前被关闭了,我感觉应该在finish里要换个位置com.alibaba.excel.context.WriteContextImpl#finish

3

org.apache.poi.xssf.streaming.SXSSFSheet#allFlushed 可能在报错的时候需要反射把这个值改成true然后才能删除,不然在磁盘满的情况下flush磁盘的时候还是无法删除临时文件

2

遇到了同样的问题,当磁盘已满时,这个dispose方法会调用失败,最后导致临时文件无法被清理。