如何将ArrayList写入csv文件

前端之家收集整理的这篇文章主要介绍了如何将ArrayList写入csv文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ArrayList< Metadata>并且我想知道是否存在用于处理CSV文件Java API,其具有接受ArrayList<>的write方法.作为类似于.Net中的LinqToCsv的参数.据我所知,OpenCSV可用,但CsvWriter类不接受集合.
我的元数据类是
public class Metadata{
    private String page;
    private String document;
    private String loan;
    private String type;
}
ArrayList<Metadata> record = new ArrayList<Metadata>();

一旦我填充了记录,我想将每一行写入csv文件.
请建议.

解决方法

肯定会有一堆API会为你做这件事,但为什么不自己做这么简单的案例呢?它将为您节省一个依赖项,这对任何规模的项目都是一件好事.

Metadata中创建一个toCsvRow()方法,该方法连接由逗号分隔的字符串.

public String toCsvRow() {
    return Stream.of(page,document,loan,type)
            .map(value -> value.replaceAll("\"","\"\""))
            .map(value -> Stream.of("\"",",").anyMatch(value::contains) ? "\"" + value + "\"" : value)
            .collect(Collectors.joining(","));
}

为每个由新行分隔的Metadata对象收集此方法的结果.

String recordAsCsv = record.stream()
        .map(Metadata::toCsvRow)
        .collect(Collectors.joining(System.getProperty("line.separator")));

编辑
如果您不是那么幸运,可以随意使用Java 8和Stream API,那么使用传统的List几乎就是这么简单.

public String toCsvRow() {
    String csvRow = "";
    for (String value : Arrays.asList(page,type)) {
        String processed = value;
        if (value.contains("\"") || value.contains(",")) {
            processed = "\"" + value.replaceAll("\"","\"\"") + "\"";
        }
        csvRow += "," + processed;
    }
    return csvRow.substring(1);
}

猜你在找的Java相关文章