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

Resource leak: workbook is never closed warning when using Apache.POI XSSFWorkbook

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

XSSFWorkbook workbook = new XSSFWorkbook(fIP);

然后我继续我的方法。 workbook.close() 不可用作事后关闭工作簿的方法。关于任务完成后如何让垃圾回收带走工作簿的任何想法?

docs 说 class 实现 Closeable。因此它有一个 close() 方法,您可以像这样关闭工作簿:

XSSFWorkbook workbook = new XSSFWorkbook(fIP)

// Do your stuff;

workbook.close();

因为 class 也实现了 AutoCloseable 你也可以使用 try-with-resources 块:

try (XSSFWorkbook workbook = new XSSFWorkbook(fIP)) {
    // Do your stuff
}

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

我遇到了这个问题,但毫无意义。 最后,我将问题追溯到我的 IDE (netbeans) 正在获取没有 "close" 方法的早期版本的 POI 库 (v3.8)。 因此,请检查您的 class 路径并查找不同版本的 POI 库的重复导入。

只需更改 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();
}