gpt4 book ai didi

java - 将大文本文件数据写入excel

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:58 24 4
gpt4 key购买 nike

我正在阅读一个用一些定界符分隔的文本文件。

我的文本文件内容示例

Avc def efg jksjd
1 2 3 5
3 4 6 0

一行一行地保存在内存中,使用以行号作为整数类型键的hashmap每行文本文件作为列表对象

考虑一下,我的 map 会像这样存储信息

整数列表

1 [Avc def efg jksjd]

我正在使用 Apache POI 写入 excel。使用 Apache POI 写入 excel 时,我遵循这种方法,这是我的代码片段

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet");
Map<Integer, List<Object>> excelDataHolder = new LinkedHashMap<Integer, List<Object>>();
int rownum = 0;
for (Integer key : keyset) {
Row row = sheet.createRow(rownum++);
List<Object> objList = excelHolder.get(key);//excelHolder is my map
int cellnum = 0;
for (Object obj : objList) {
Cell cell = row.createCell(cellnum++);
cell.setCellValue((Date) obj);
}
}

如果要写入 excel 的行数/记录数较少,则此方法效果很好。想象一下,如果记录的数量为十亿,或者文本文件的行数假设为 100 000。我认为,我的方法失败了,因为createRow 和 createCell 在堆中创建超过 100 000 个对象。无论 java 到 excel api,我认为写入它(excel)是基于相同的方法,即,如上所示的集合迭代。我也用aspose做了一些例子,结果我猜aspose也有同样的问题。

  • createRow 和 createCell 是否在每次调用时都创建新对象?
  • 如果是,还有什么选择?我将如何编写大数据以获得更好的性能?

最佳答案

最新版本的 apache-poi 有 sxssf .从网站无耻复制

SXSSF (package: org.apache.poi.xssf.streaming) is an API-compatible streaming extension of XSSF to be used when very large spreadsheets have to be produced, and heap space is limited. SXSSF achieves its low memory footprint by limiting access to the rows that are within a sliding window, while XSSF gives access to all rows in the document. Older rows that are no longer in the window become inaccessible, as they are written to the disk.

我用它创建了包含 150 万行的电子表格。

关于java - 将大文本文件数据写入excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538525/

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