我正在读取一个文本文件,并用一些定界符分隔。

我的文本文件内容示例

AVC DEF EFG JKSJD
1 2 3 5
3 4 6 0

逐行并将其保存在内存中,使用具有行号作为整数类型键的hashmap和
文本文件的每一行都作为List对象

考虑一下,我的 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的行数/记录数较少,则此方法效果很好。想象一下,如果记录的数量是十亿,或者如果文本文件中的行数更多,则假定为10万。
createRow和createCell在堆中创建了超过100000个对象。
无论将Java转换为excel api,我都认为写入excel(excel)是基于相同的方法,即如上所述的collection的迭代。我也用aspose做过一些例子,结果aspose也有我猜到的同样问题。
  • createRow和createCell每次调用时都会创建新对象吗?
  • 如果是,替代方法是什么?我将如何写入大数据以取得更好的性能?
  • 最佳答案

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



    我曾用它来创建具有150万行的电子表格。

    09-10 06:15
    查看更多