如何从CSV文件中读取特定列?

时间:2014-01-14 12:44:01

标签: java csv

我有一个包含5个字段(列)的csv文件。在5列中,我想要仅读取第二和第四列,这是进一步处理所需的。 现在我正在使用opencsv api的readAll()方法来读取。 通过使用此方法,我必须处理所有列以获取第二和第四列值。

有没有办法读取所需列的值,即从csv文件中读取第二个和第四个值?

这是正确的方法还是我应该使用其他任何方法?

3 个答案:

答案 0 :(得分:0)

如果性能是一个问题,从你的问题看起来我会建议你实现自己的解析器。 opencsv没有提供这样的功能。可以说,因为表现胜利不会那么大。

答案 1 :(得分:0)

我不这么认为。

为了确定哪个列具有哪个索引,csv-parser必须处理整行,或者至少在最后一列处理您拥有的内容(在您的情况下为第四列)。即使您的数据具有固定长度,您仍然必须读取整行,以便您知道子串的边界。

如果内存使用有问题,那么使用CSVReader#readAll()不是最佳选择。在这种情况下,我建议使用CSVReader#iterator()代替并按返回者数组的索引访问您的列,例如myCsvRow[1]myCsvRow[3]

答案 2 :(得分:0)

使用Commons CSV,您可以迭代csv元素并使用列标签读取特定列。

注意:(通用CSV是openCsv和其他csv解析器的统一)。        http://commons.apache.org/proper/commons-csv/

要读取特定列,您可以将每个csvRecord转换为Map并获取其值,如下所示:

List<CSVRecord> aCSVList == aCSVParser.getRecords();
...
for (CSVRecord aCSVRecord : aCSVList)
{
   ...
    Map<String, String> aCurrentMap = aCSVRecord.toMap();
    aCurrentMap.get("ColumnLabel");
}