我正在阅读一个文本文件,其中包含一些分隔符。
以下是我的文本文件内容示例:
Avc def efg jksjd 1 2 3 5 3 4 6 0
我逐行读取文本文件,并将其保存在内存中,使用哈希映射将行号作为整数类型的键,并将文本文件的每一行作为List对象。
考虑到这一点,我的映射将存储如下信息:
整数列表
1 [Avc def efg jksjd]
我正在使用Apache POI写入Excel。在使用Apache POI写入Excel时,我遵循以下方法,以下是我的代码片段。
以下是我的文本文件内容示例:
Avc def efg jksjd 1 2 3 5 3 4 6 0
我逐行读取文本文件,并将其保存在内存中,使用哈希映射将行号作为整数类型的键,并将文本文件的每一行作为List对象。
考虑到这一点,我的映射将存储如下信息:
整数列表
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会在堆中创建超过10万个对象。无论使用哪种Java到Excel的API,写入Excel都是基于相同的方法,即集合迭代,如上所示。我也用Aspose做了一些示例,结果Aspose也有同样的问题。
- 每次调用createRow和createCell是否都会创建新的对象?
- 如果是,有什么替代方法吗?如何以更好的性能将大量数据写入Excel?