另外,允许以可读/容易的方式处理长行,既可以写入也可以读取。
我已经研究了opencsv
,但是它没有以任何连续的方式引用行中的元素,并且supercsv
不允许按名称而是仅按数字查看列。
另一个警告-我需要能够按名称寻址列-列数不是恒定的,并且只有列标题的一部分是恒定的,例如:
Name|Number|Color1|Color2......|Color67|
并非所有给定CSV文件中都存在1到67之间的所有颜色。
最佳答案
我真的不能和opencsv对话,但是如果您有固定数量的you might be able to use the JavaBean binding to do something like this字段。
但是,Super CSV绝对支持使用CsvBeanReader,CsvDozerBeanReader或CsvMapReader(及其等效书写方式)按名称读取和写入CSV行。
如果您希望简化操作并使用映射(将列名作为键,将列值作为值),则可以使用CsvMapReader。超级CSV网站上有一些使用CsvMapReader的reading和writing的示例。
阅读示例:
ICsvMapReader mapReader = new CsvMapReader(
new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
try {
final String[] headers = mapReader.getHeader(true);
Map<String, String> row;
while( (row = mapReader.read(headers)) != null) {
for (String header : headers) {
System.out.println(header + " is " + row.get(header));
}
}
} finally {
mapReader.close();
}
写作非常相似。