0

以下是 csv 文件的示例:

客户编号、名字、姓氏、出生日期、邮寄地址、已婚、孩子数量、最喜欢的报价、电子邮件、忠诚度积分

1,John,Dunbar,13/06/1945,"1600 Amphitheatre Parkway Mountain View, CA 94043 United States",,,""愿原力与你同在。"" - 星球大战",jdunbar@gmail.com, 0
2,Bob,Down,25/02/1919,"1601 Willow Rd. Menlo Park, CA 94025 United States",Y,0,"""坦率地说,亲爱的,我不在乎。"" -乱世佳人”,bobdown@hotmail.com,123456

例如,如何获取所有列值属于姓氏?
我希望结果应该是 [Dunbar, Down]。

我试图搜索文档,但找不到任何有用的示例。

还有一个问题是,getLineNumber() 方法的含义是什么?我读过文档,上面写着“获取文件中的当前位置。文件的第一行是第 1 行。” 但我仍然很困惑。

4

2 回答 2

1

你有很多选择。我使用过 CsvListReader,但您也可以轻松地使用 CsvMapReader 或 CsvBeanReader。

您可以使用收集器单元处理器:

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 不同,后者是文件中已读取的实际行数。第一行是第 1 行(通常是标题行)。

于 2014-02-02T21:19:29.137 回答
0

如果您可以读取 csv 的每一行,例如使用 readline,只需拆分字符串并读取第 2 列。

String[] csvLine = getLine().split(",");  
String lastName = csvLine[2];  
于 2014-02-02T09:55:00.920 回答