I am getting a java outofmemory error. I added the necessary java arguments, but I still keep getting this error. I shared the libraries and functions that I use. The function It gives this error when converting a large csv file (about 15mb) into an xlsx file. It working properly on small files without any errors. How can i fix this error? Thanks.
I added these java args on Intellij Idea
Main
public class Main {
public static void main(String[] args) {
convert_CSV_to_XLSX(S.CSV_PATH,S.XLSX_PATH,"Sheet");
}
}
Convert CSV to XLSX
public void convert_CSV_to_XLSX(String inputFilePath, String outputFilePath, String sheetName) {
try {
ArrayList<ArrayList<Object>> csvObjectsAll = readCSV(inputFilePath);
writeXLSX_horizontally(outputFilePath, csvObjectsAll, sheetName);
} catch (Exception e) {
e.printStackTrace();
}
}
ReadCSV
public ArrayList<ArrayList<Object>> readCSV(String inputFilePath) {
ArrayList<ArrayList<Object>> gal = new ArrayList<>();
try {
String csvStr = new String(Files.readAllBytes(Paths.get(inputFilePath)), StandardCharsets.UTF_8);
for (String str : csvStr.split("\n")) {
ArrayList<Object> csvLinesSplit = new ArrayList<>();
String ss = str.replaceAll("\"", "");
if (ss.charAt(ss.length() - 1) == ',') {
ss += "$";
}
for (String s : ss.split(",")) {
if (s.equals("") || s.equals("$")) {
csvLinesSplit.add("");
} else {
csvLinesSplit.add(s);
}
}
gal.add(csvLinesSplit);
}
} catch (Exception e) {
}
return gal;
}
Write XLSX
public void writeXLSX_horizontally(String outputFileName, ArrayList<ArrayList<Object>> gdl, String sheetName) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(sheetName);
int rowNum = 0;
for (ArrayList<Object> objectArrList : gdl) {
Row row = sheet.createRow(rowNum++);
int cellNum = 0;
for (Object obj : objectArrList) {
Cell cell = row.createCell(cellNum++);
boolean is_double = false, is_integer = false;
try {
cell.setCellValue(Double.parseDouble(obj.toString()));
is_double = true;
} catch (Exception e) {
}
if (!is_double) {
try {
cell.setCellValue(Integer.parseInt(obj.toString()));
is_integer = true;
} catch (Exception e) {
}
}
if (!is_double && !is_integer) {
if (obj == null) {
cell.setCellValue(new String());
} else {
cell.setCellValue(obj.toString());
}
}
}
}
try {
FileOutputStream file = new FileOutputStream(outputFileName);
workbook.write(file);
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
VM options, notProgram argumentsnew String()->""is a minor, but obvious improvement