资源泄漏:使用Apache.POI XSSFWorkbook时,工作簿永远不会被关闭

rpd*_*rpd 6 java garbage-collection apache-poi

因此,我使用Apache POI将Excel文件解析为我的数据库.为此,我正在初始化XSSFWorkbook如下:

XSSFWorkbook workbook = new XSSFWorkbook(fIP);
Run Code Online (Sandbox Code Playgroud)

然后我继续我的方法.workbook.close()不适用于以后关闭工作簿的方法.有关如何在任务完成后让垃圾收集进入工作簿的任何想法?

Ian*_*anB 10

我有这个问题,而且没什么意义.最后我跟踪问题到我的IDE(netbeans)正在拿起早期版本的POI库(v3.8),它没有"关闭"方法.因此,请检查您的类路径,并查找不同版本的POI库的重复导入.


ste*_*oss 5

文档说,类实现Closeable。因此,它具有一种close()方法,您可以像这样关闭工作簿:

XSSFWorkbook workbook = new XSSFWorkbook(fIP)

// Do your stuff;

workbook.close();
Run Code Online (Sandbox Code Playgroud)

由于该类也实现了,AutoCloseable因此您还可以使用try-with-resources块:

try (XSSFWorkbook workbook = new XSSFWorkbook(fIP)) {
    // Do your stuff
}
Run Code Online (Sandbox Code Playgroud)

如果使用这种方法,则try块完成后,工作簿将自动关闭。