以下是csv文件的示例:
customerNo,名字,姓氏,出生日期,mailingAddress,已婚,numberOfKids,favouriteQuote,电子邮件,loyaltyPoints
1,John,Dunbar,13/06/1945,“1600 Amphitheatre Parkway
Mountain View,CA 94043
美国“,,,”“”愿部队与你同在。“” - 星球大战“,jdunbar @ gmail.com,0
2,Bob,Down,25/02/1919,“1601 Willow Rd。
Menlo Park,CA 94025
美国“,Y,0,”“坦率地说,我亲爱的,我不会诅咒。”“ - 飘”,bobdown @ hotmail.com,123456
例如,如何获取属于lastName的所有列值?
我希望结果应该是[Dunbar,Down]。
我试图搜索文档,但找不到任何有用的例子。
还有一个问题是,getLineNumber()方法的含义是什么?我已经阅读了文档,它说“获取文件中的当前位置。文件的第一行是第1行。”但我仍然感到困惑。
答案 0 :(得分:1)
您有很多选择。我使用过CsvListReader,但您可以轻松地使用CsvMapReader或CsvBeanReader。
您可以使用Collector单元格处理器:
private static final String CSV = "firstName,lastName\nJohn,Dunbar\nBob,Down";
@Test
public final void testCollector() throws IOException {
ICsvListReader reader = new CsvListReader(new StringReader(CSV),
CsvPreference.STANDARD_PREFERENCE);
reader.getHeader(true); // skip header
// Collector processor 'collects' values from a column
List<Object> firstNames = new ArrayList<Object>();
CellProcessor[] processors = {new Collector(firstNames), null};
while(reader.read(processors) != null){
// just keep reading - Collector will collect the values
}
// prints: [John, Bob]
System.out.println(firstNames);
}
或者在Super CSV读取每一行后抓取相关列:
@Test
public final void testManual() throws IOException {
ICsvListReader reader = new CsvListReader(new StringReader(CSV),
CsvPreference.STANDARD_PREFERENCE);
reader.getHeader(true); // skip header
List<String> firstNames = new ArrayList<String>();
List<String> line;
while((line = reader.read()) != null){
firstNames.add(line.get(0));
}
// prints: [John, Bob]
System.out.println(firstNames);
}
无论哪种方式,您都需要阅读整个文件 - CSV不是电子表格,您不能轻易地获取特定列中的所有值(记录可以跨越1行!)。这让我想到你的下一个问题...
直接来自javadoc:
getLineNumber():获取文件中的当前位置。该文件的第一行是第1行。
getRowNumber():获取当前行号(即已读取的CSV记录数 - 包括标题)。这与lineNumber不同,lineNumber是文件中已读取的实际行数。第一行是第1行(通常是标题行)。
答案 1 :(得分:0)
如果您可以读取csv的每一行,例如readline,只需拆分字符串并阅读第2列。
String[] csvLine = getLine().split(",");
String lastName = csvLine[2];