JXLS的XLSReader是否关闭工作簿?

时间:2017-11-21 17:36:36

标签: java excel resources jxls resource-leak

我想知道jxls中的XlsReader类是否关闭了工作簿。 我的代码是这样的:

XLSReader mainReader = ReaderBuilder.buildFromXML(inputStreamXml);
mainReader.read(inputStreamXLS, beans);

XLSReader中没有类似关闭的方法。当工作簿关闭但我无法找到时,我试图在内部代码中找到一些观点。 这是read方法的内部实现:

public XLSReadStatus read(InputStream inputXLS, Map beans) throws 
        IOException, InvalidFormatException{
        readStatus.clear();
        Workbook workbook = WorkbookFactory.create(inputXLS);
        for(int sheetNo = 0; sheetNo < workbook.getNumberOfSheets(); sheetNo++){
            readStatus.mergeReadStatus(readSheet(workbook, sheetNo, beans));
        }
        return readStatus;
}

有时xls文件被应用程序锁定,因为我在代码中找不到资源未释放的任何点,我想知道问题是否是jxls。显然XLSReader没有关闭工作簿。我的应用程序关闭inputStreams。应用程序是否还需要关闭工作簿?

1 个答案:

答案 0 :(得分:1)

XLSReader不会关闭工作簿。原因是jxls-reader是一个旧模块,在创建它时,POI中没有工作簿close()方法。

现在我相信该方法应该用于关闭工作簿并释放底层文件资源。所以现在是在jxls-reader issue tracker

中提出错误的好时机