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