Мне нужно прочитать несколько файлов xlsx в поисках данных, относящихся к сотруднику, и одновременно создать еще один файл xlsx (если я найду данные в любом из файлов) с именем файла в качестве идентификатора сотрудника, добавленного к имени, в котором я нашел данные. Например. есть сотрудник с emp id 1, и есть несколько файлов xlsx, таких как A, B, C ... и т. д .; Мне нужно искать данные, относящиеся к emp id 1 в каждом файле, и для файлов, которые я получаю, мне нужно создать файл с именем 1_A.xlsx.
Теперь, хотя я создал логику и использую API-интерфейсы Apache POI для чтения и записи, мой код выдает ошибку Out Of Memory после создания только первого файла с данными. И не может прочитать остальные файлы.
Я пытался использовать SXSSF вместо XSSF, но происходит то же OOM.
Увеличение пространства кучи не вариант для меня.
Пожалуйста, помогите здесь ... Спасибо заранее.
Вот кусок кода:
//Reader:
Row row = null;
List<Row> listOfRecords = new ArrayList<Row>();
try {
FileInputStream fis = new FileInputStream(metaDataFile);
new InputStreamReader(fis, "ISO-8859-1");
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
row = rowIterator.next();
if (!isEmptyRow(row)) {
listOfRecords.add(row);
}
}
wb.close();
fis.close();
//Writer
LOGGER.info("in createWorkbook " );
Workbook empWorkbook = new SXSSFWorkbook(200);
Sheet empSheet = empWorkbook.createSheet("Itype Sheet For Emp_"
+ personnelNumber);
int rowNum = listOfRecords.size();
System.out.println("Creating excel");
Cell c = null;
for (int i = 0; i < rowNum; i++) {
Row record = listOfRecords.get(i);
Row empRow = empSheet.createRow(i++);
if (!isEmptyRow(record)) {
int colNum = record.getLastCellNum() + 1;
for (int j = 0; j < colNum; j++) {
Cell newCell = empRow.createCell(j);
System.out.println("cellVal:"
+ String.valueOf(record.getCell(j)));
newCell.setCellValue(String.valueOf(record.getCell(j)));
}
}
}
Метод писателя вызывается из читателя.