【发布时间】:2021-05-28 15:48:33
【问题描述】:
我正在尝试将一些数据写入 csv。这是我想要做的:
class Sample {
private String id;
private String type;
private String name;
private int value;
// getter-setter
}
实施
import com.opencsv.CSVWriter;
...
// code snippet
List<String> ids = getIds();
List<Sample> result = new ArrayList<>();
for (String id : ids) {
Sample sample = getSample(id);
result.add(sample);
}
//write result to csv
CSVWriter csvWriter = new CSVWriter(new FileWriter(filePath), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER);
// Not sure what to do next here.
我找不到太多关于将实例列表写入 csv 的内容。
更新:
我按照@Praveen 的建议尝试了下面的链接和代码,@dgg 在 cmets 中,但我得到的是空的 csv 文件。
public void writeToCsv(String filePath, String[] header, List<Sample> samples) throws IOException {
try (FileWriter writer = new FileWriter(filePath)) {
ColumnPositionMappingStrategy mappingStrategy = new ColumnPositionMappingStrategy();
mappingStrategy.setType(Sample.class);
mappingStrategy.setColumnMapping(header);
StatefulBeanToCsv<Sample> beanToCsv = new StatefulBeanToCsvBuilder<Sample>(writer)
.withMappingStrategy(mappingStrategy)
.withSeparator('#')
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.build();
// todo: getting empty csv file. why? currently debugging.
beanToCsv.write(samples);
} catch (CsvRequiredFieldEmptyException e) {
e.printStackTrace();
} catch (CsvDataTypeMismatchException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
如果您有示例对象列表 (
List<Sample>),那么您可以write that list directly to a CSV file。这一切都在文档中。 -
这里是介绍:baeldung.com/opencsv
-
@dgg 我尝试了 StatefulBeanToCsv,但生成了空的 csv。
-
向我们展示您修改后的代码。你可以edit这个问题。另外,请告诉我们您使用的 OpenCSV 版本。