poi 3.8 SXSSFWorkbook没有删除本地缓存文件方法


poi 3.8 中存在SXSSFWorkbook 但是没有despose() 方法,使用时间长了的话有可能造成磁盘没有空间,

window环境本地缓存会存放在C盘用户下面AppDate\Local\Temp 下面

linux环境下会存放在 temp/poifile 录下,

解决这个问题可以使用下面代码。在wookbook写完数据的时候调用此方法deleteSXSSFTempFiles(workbook),

import java.lang.reflect.Field;

import org.apache.poi.xssf.streaming.SheetDataWriter;

  public static void deleteSXSSFTempFiles(SXSSFWorkbook workbook)

        throws NoSuchFieldException, IllegalAccessException {

 

     int numberOfSheets = workbook.getNumberOfSheets();

 

     // iterate through all sheets (each sheet as a temp file)

     for (int i = 0; i < numberOfSheets; i++) {

         Sheet sheetAt = workbook.getSheetAt(i);

 

        // delete only if the sheet is written by stream

        if (sheetAt instanceof SXSSFSheet) {

            SheetDataWriter sdw = (SheetDataWriter) getPrivateAttribute(

                   sheetAt, "_writer");

            File f = (File) getPrivateAttribute(sdw, "_fd");

 

           try {

                f.delete();

            } catch (Exception ex) {

               // could not delete the file

            }

         }

      }

   }

 

public static Object getPrivateAttribute(Object containingClass,

         String fieldToGet) throws NoSuchFieldException,

         IllegalAccessException {

     // get the field of the containingClass instance

      Field declaredField = containingClass.getClass().getDeclaredField(

            fieldToGet);

     // set it as accessible

      declaredField.setAccessible(true);

     // access it

      Object get = declaredField.get(containingClass);

     // return it!

     return get;

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值