资源泄漏:使用Apache.POI XSSFWorkbook时,工作簿永远不会被关闭
因此,我使用Apache POI将Excel文件解析为我的数据库。 为此,我正在初始化XSSFWorkbook
如下:
XSSFWorkbook workbook = new XSSFWorkbook(fIP);
然后我继续我的方法。 workbook.close()
不可用作以后关闭工作簿的方法。 有关如何在任务完成后让垃圾收集进入工作簿的任何想法?
我有这个问题,而且没什么意义。 最后我跟踪问题到我的IDE(netbeans)正在拿起早期版本的POI库(v3.8),它没有“关闭”方法。 因此,请检查您的类路径,并查找不同版本的POI库的重复导入。
文档说该类实现了Closeable
。 因此它有一个close()
方法,您可以像这样关闭工作簿:
XSSFWorkbook workbook = new XSSFWorkbook(fIP) // Do your stuff; workbook.close();
由于该类还实现了AutoCloseable
因此您也可以使用try-with-resources块:
try (XSSFWorkbook workbook = new XSSFWorkbook(fIP)) { // Do your stuff }
如果使用此方法,则在try块完成后将自动关闭工作簿。
只需从以下的apache页面更改示例:
try { FileInputStream excelFile = new FileInputStream(new File(FILE_NAME)); Workbook workbook = new XSSFWorkbook(excelFile); //more stuffs }
至:
Workbook workbook; try { InputStream excelFile = file.getInputStream(); workbook = new XSSFWorkbook(excelFile); //more stuffs workbook.close(); excelFile.close(); }
- 写入XLSX文件(POI)时JVM崩溃
- SXSSFWorkbook上的AutosizeColumns
- 使用Apache POI HSSF,如何一次刷新所有公式单元格?
- 使用Apache POI读取xlsx文件时获取exception(org.apache.poi.openxml4j.exception – 无内容类型)?
- 如何包含同一依赖项的两个不同版本?
- MalformedByteSequenceException:2字节UTF-8序列的无效字节2
- 将List实例写入Excel文件 – Apache POI
- 无法使用Apache POI获取/设置Word文档(.doc)中的复选框值
- 使用java POI插入表时,打开的办公室编写器崩溃了