资源泄漏:使用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(); }