gpt4 book ai didi

java - 在 Apache POI Java 中将大数据转换为 excel

转载 作者:行者123 更新时间:2023-11-30 07:53:07 25 4
gpt4 key购买 nike

我正在处理一个大型 CSV (~200 mb 的文本文件),我想将其转换为 excel 工作表,但工作簿变得如此消耗内存,以至于在过程中间,Java抛出“超出 GC 开销限制”!如果我正在生成虚拟引用,我已经检查了代码,但我认为不存在。

在我看来,来自 Apachi - POI 的那些库调用可能会生成一些使垃圾收集器如此忙碌的引用。

我的问题是,我是否可以将工作簿逐 block 写入文件,就像文本文件一样,就像附加到文本文件而不将其放入内存一样。是否有任何解决方案,或者我在这里遗漏了什么?

GC在以下代码中抛出异常:

    private void updateExcelWorkbook(String input, String fileName, Workbook workbook) {
try {
Sheet sheet = workbook.createSheet(fileName);

// Create a new font and alter it.
Font font = workbook.createFont();
font.setFontHeightInPoints((short) 11);
font.setBold(true);


// Fonts are set into a style so create a new one to use.
CellStyle style = workbook.createCellStyle();
style.setFont(font);
Row row;
Cell cell;
String[] columns;
String[] lines = input.split("\n");
int colIndex;
int rowIndex = 1;

for (String line : lines) {
row = sheet.createRow(rowIndex++);
columns = line.split("\t");
colIndex = 0;

for (String column: columns) {
cell = row.createCell(colIndex++);
if (rowIndex == 1)
cell.setCellStyle(style);
cell.setCellValue(column);
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}

最佳答案

似乎您正在使用 POI 用户模型,它占用的内存非常多,因为它将整个工作表保存在内存中,类似于 DOM 将整个 XML 文档保存在内存中的方式。

您需要使用流式 API。使用 POI,您可以使用 SXSSF 缓冲流 API 创建 .xlsx 文件,如此处所述:https://poi.apache.org/spreadsheet/index.html#SXSSF+(Since+POI+3.8+beta3)

上面链接的页面有这张图片,显示了 POI 的电子表格 API 功能摘要:
Spreadsheet API Feature Summary
(来源:apache.org)

关于java - 在 Apache POI Java 中将大数据转换为 excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45092170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com