如何读取csv并从每行创建一个地图列表?

时间:2015-06-09 14:38:22

标签: java csv opencsv

我有一个Java类来自动化Web上的某些行为,我唯一的问题是现在我需要使用来自csv的数据而不是我需要的静态数据。

例如:

这是我的自动化类中的一个操作:

WebElement supplierAddressField = driver.findElement(By.id("FieldaddressOfSupplierLine"));
        supplierAddressField.sendKeys("hollywood blvd 34");

现在,我想在.sendKeys(csvLineMap.get("supplier address"));

的每一行上迭代而不是静态的“供应商地址”值。

因为在每一行中我都不需要所有标题信息,这就是为什么我认为最好只创建一个地图列表,每个地图键都是csv的标题,值将是特定行中此标题的值。

这是csv的结构:

enter image description here

请帮我解决这个问题...谢谢!!

3 个答案:

答案 0 :(得分:1)

Apache Commons CSV

根据您的要求,我建议您查看Apache Commons CSV。他们User Guide中的一个示例与您正在尝试的示例非常接近

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
    String lastName = record.get("Last Name");
    String firstName = record.get("First Name");
}

答案 1 :(得分:0)

好吧,这可能对你想要的东西过于复杂,但是我总是打开csv作为excel文件,因为那时你可以运行列。拾取任何列的代码如下所示:

CREATE VIEW KFF_Sales_Data_Updated
AS
SELECT 
     csu.cAuditNumber
    ,csu.Col1
    ,csu.Col2
    ,csu.Col3
    ,ssu.Col1 AS StkCol1
    ,ssu.Col2 AS StkCol2
    ,ssu.Col3 AS StkCol3
FROM CustSalesUpdated csu
INNER JOIN StkSalesUpdated ssu ON csu.cAuditNumber = ssu.cAuditNumber

你现在有一个二维数组,里面有你可以处理的所有信息。

将整个事物包裹在try .. catch。

答案 2 :(得分:0)

使用uniVocity-parsers,您只能按任意顺序解析您感兴趣的字段:

    CsvParserSettings parserSettings = new CsvParserSettings();

    // Let's extract headers
    parserSettings.setHeaderExtractionEnabled(true);

    parserSettings.selectFields("Field 5", "Field 1");

    //Rows will come organized according to your field selection
    List<String[]> allRows = parser.parseAll("path/to/file.csv");

如果您愿意,可以轻松获取包含所有列值的地图:

    CsvParserSettings parserSettings = new CsvParserSettings();
    // Let's extract headers
    parserSettings.setHeaderExtractionEnabled(true);

    // To get the values of all columns, use a column processor
    ColumnProcessor rowProcessor = new ColumnProcessor();
    parserSettings.setRowProcessor(rowProcessor);

    CsvParser parser = new CsvParser(parserSettings);

    //This will kick in our column processor
    parser.parse(new FileReader("path/to/file.csv"));

    //Finally, we can get the column values:
    Map<String, List<String>> columnValues = rowProcessor.getColumnValuesAsMapOfNames();

看一看。它比任何其他解析器都快,你可以做更多的事情,比如转换值和生成java bean。

披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。