我想加載使用5張工作表的POI庫的XLSX文件。該文件的大小是5 MB。所有工作表中的記錄總數約爲30,000。 一旦文件被加載,我需要基於表單neame作爲輸入來即時刪除一個或多個表單。XLSX刪除表OutOfMemory異常
以下是摘錄。
public void generateReportWorkBook(String[] requestedReports) throws Exception {
// Read the file
String dailyTicketReport = ReportConstants.REPORT_PATH + ReportConstants.FILE_NAME + ReportConstants.XLSX_FILE_EXTN;
FileInputStream fis = null;
XSSFWorkbook book = null;
try {
fis = new FileInputStream(dailyTicketReport);
book = new XSSFWorkbook(fis);
for (int i = book.getNumberOfSheets() - 1; i >= 0; i--) {
XSSFSheet tmpSheet = book.getSheetAt(i);
if (!ArrayUtils.contains(requestedReports, tmpSheet.getSheetName())) {
book.removeSheetAt(i);
}
}
} catch (Exception e) {
logger.error("Error occured while removing the sheets from workbook");
throw e;
} finally {
IOUtils.closeQuietly(fis);
}
}
當我執行程序。我得到OutofMemory異常。 如何刪除沒有內存問題的工作表。
您的堆大小設置爲?如果你關心內存,你爲什麼直接使用InputStream代替File? [文檔清楚地指出File比InputStream使用更少的內存](http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream)... – Gagravarr 2013-05-09 17:30:42
使用File而不是InputStream,你可以使用SXSSFWorkbook( )如果你有更多records.Workbook workBook = new SXSSFWorkbook(); – swamy 2013-05-10 07:03:01