Я бы хотел прочитать большой файл Excel 2007 с Apache POI. Quick start guide указывает, что для сохранения памяти следует использовать File
.Как лениво читать большие файлы Excel 2007 с Apache POI
При открытии рабочей книги, либо .xls HSSFWorkbook или .xlsx XSSFWorkbook, то книга может быть загружена либо из файла или InputStream. Использование объекта File позволяет снизить потребление памяти, , в то время как InputStream требует больше памяти, поскольку он должен буферизировать весь файл .
поэтому я написал примерно так:
opcPackage = OPCPackage.open(file);
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
XSSFSheet sheet = workbook.getSheetAt(0);
rows = sheet.rowIterator();
if (rows.hasNext()) {
Row row = rows.next();
System.out.println(row.getCell(1).getStringCellValue());
}
Однако это приводит к java.lang.OutOfMemoryError: Java heap space
для листа с более чем приблизительно 10000 строк.
Я надеялся, что итерация только лениво загружает те строки, которые должны быть прочитаны, как поток.
Как я могу обойти проблемы памяти с большими файлами Excel? Могу ли я читать лениво с помощью Apache POI?