我有一个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(",")); }
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); }