J'écris un fichier Excel à l'aide d'un POI Apache.JAVA - Apache POI OutOfMemoryError lors de l'écriture d'un fichier Excel
Je veux y écrire toutes les données de MyResultSet
qui a les noms des champs (colonnes) stockées dans la chaîne [] fieldnames.
J'ai 70000 lignes et 27 colonnes
Mon code:
String xlsFilename = "myXLSX.xlsx";
org.apache.poi.ss.usermodel.Workbook myWorkbook = new XSSFWorkbook();
org.apache.poi.ss.usermodel.Sheet mySheet = myWorkbook.createSheet("myXLSX");
Row currentRow = mySheet.createRow(0);
for (int k = 0; k < fieldNames.length; k++) {
// Add Cells Of Title Of ResultsTable In Excel File
currentRow.createCell(k).setCellValue(fieldNames[k]);
}
for (int j = 0; j < countOfResultSetRows; j++) {
myResultSet.next();
currentRow = mySheet.createRow(j + 1);
for (int k = 0; k < fieldNames.length; k++) {
currentRow.createCell(k).setCellValue(myResultSet.getString(fieldNames[k]));
System.out.println("Processing Row " + j);
}
}
FileOutputStream myFileOutputStream = new FileOutputStream(xlsFilename);
myWorkbook.write(myFileOutputStream);
myFileOutputStream.close();
Mon problème est que tout en écrivant les lignes du programme est plus en plus lent.
Quand il atteint la ligne 3500, il arrête avec l'exception:
Exception dans le thread "thread-3" java.lang.OutOfMemoryError. Java espace de tas à java.lang.AbstractStringBuilder (AbstractStringBuilder.java:45) à java.lang.StringBuffer. (StringBuffer.java:79)
Il semble que je manque de mémoire.
Comment puis-je résoudre ce problème.
Y at-il un moyen de stocker mes données dans un fichier temporaire toutes les 1000 d'entre eux (par exemple)?
Que suggéreriez-vous?
j'ai eu le même problème en utilisant JXL et ne jamais le résoudre soit (JAVA - Out Of Memory Error while writing Excel Cells in jxl)
Maintenant, je besoin de fichiers .xlsx de toute façon, donc je dois utiliser POI.
Quel serveur d'applications utilisez-vous? –