[英]How to write ArrayList<Object> to a csv file
我有一個ArrayList<Metadata>
,我想知道是否有一個用於處理CSV文件的Java API,它有一個write方法,它接受一個類似於.Net中LinqToCsv的參數ArrayList <>。 據我所知, 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, document, loan, type)) {
String processed = value;
if (value.contains("\"") || value.contains(",")) {
processed = "\"" + value.replaceAll("\"", "\"\"") + "\"";
}
csvRow += "," + processed;
}
return csvRow.substring(1);
}
通過使用CSVWriter ,您可以將ArrayList
轉換為數組,並將其傳遞給writer。
csvWriter.writeNext(record.toArray(new String[record.size()]));
如果您有一個對象的ArrayList(在您的情況下是元數據),您將使用BeanToCSV而不是CSVWriter。
您可以在opencsv源代碼中查看BeanToCSVTest,以獲取如何使用它的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.