【发布时间】:2020-07-12 11:27:10
【问题描述】:
我有一个字符串数组列表,我需要将其高效地写入 CSV 文件。我已经尝试了以下两种方法。
数据集是一个至少有 100 万条记录的文件。 IE。 returnedList 至少有 100 万个 String[] 数组。
我当前的代码效率极低,并且使用 StringBuilder 花费的时间太长:
BufferedWriter br = new BufferedWriter(new FileWriter(filePath + "test.csv"));
for(String[] listEntry : returnedList) {
// convert each array to a string first
for(String s : listEntry) {
builder.append(s);
}
String str = builder.toString();
br.write(str);
br.newLine();
}
br.close();
assertThat(newFirstRow).isNotEmpty();
我的第二次尝试是使用 OpenCsv API:
Writer writer = Files.newBufferedWriter(Paths.get(filePath + "test.csv"));
StatefulBeanToCsv<String[]> beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.build();
beanToCsv.write(returnedList);
这个方法失败了,不知何故,插入文件的所有记录都是空的。
我是否错误地使用了 OpenCsv 库?
【问题讨论】:
-
您当前的代码(第一次尝试)存在严重缺陷:1)没有分隔逗号,2)行之间的缓冲区未清除,因此结果是行的多个副本。 --- 不起作用的代码的性能无关紧要。在尝试优化代码之前,让代码正常工作。不知道“非常低效”是什么意思,但也许所有额外的输出都会减慢它的速度,所以首先修复错误。
标签: java export-to-csv opencsv