如何使用Apache Commons CSV java忽略CSV文件最后一行中的记录?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (72)

我正在使用Apache Commons CSV来读取CSV文件。该文件在最后一行有关于文件本身(生成日期和时间)的信息。

|XXXX                                |XXXXX|XXXXX|XXXX|
|XXXX                                |XXXXX|XXXXX|XXXX|
|File generation: 21/01/2019 17.34.00|     |     |    |

因此,在解析文件时,我将其作为记录(显然)。我想知道有没有办法摆脱解析,Apache Commons CSV有任何处理它的条款。

提问于
用户回答回答于

Apache Commons CSV提供了忽略标题的功能(https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html#withSkipHeaderRecord--),但不提供一个无视的解决方案footer。但是你可以通过手动忽略最后一条记录来获取所有记录,除了最后一条记录。

用户回答回答于

这是一个循环,你不会知道什么时候到达结束直到你结束。您有两种选择:

  • 错误选项:读取一次并计算行数,然后当您第二次读取它时,可以break在到达(计数器1)行时循环。
  • 好的选择:看起来你的文件是管道分隔的,所以当你逐行处理时 line.trim().spit("|").length() > 1,只要每行的记录数大于1,就确保或者在你的情况下做一些工作。这将确保你不要不要将你的逻辑应用于只有一列的行,这列恰好是你的最后一行,也就是页脚。

从Apache公共区域获取并修改了一个例子

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in);
for (CSVRecord record : records) {
    //all lines except the last will result greater than 1
    if (record.size() > 1){ 
        //do your work here 
        String columnOne = record.get(0);
        String columnTwo = record.get(1);
    } 
}

扫码关注云+社区

领取腾讯云代金券