2013-06-12 2 views
3

Я бы хотел прочитать большой файл 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?

ответ

Смежные вопросы