1

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

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

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

4

2 回答 2

1

这是一个while循环,直到你到达终点,你才会知道什么时候到达终点。你有两个选择:

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

示例取自 Apache commons 并稍作修改

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);
    } 
}
于 2019-03-14T22:40:33.980 回答
-1

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

于 2019-03-14T12:01:15.600 回答