【发布时间】:2018-09-26 08:26:43
【问题描述】:
使用org.apache.commons.csv.CSVParser 我有一个奇怪的行为。
我正在尝试逐行读取由 ; 分隔的 csv 文件,但我的解析器由于未知原因正在跳过行。
这是我的代码:
public static void main(String[] args) {
try (
File file = new File("myFile.csv");
Reader reader = new BufferedReader(new FileReader(file));
CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.withDelimiter(';'));
) {
if (!parser.iterator().hasNext()) {
throw new RuntimeException("The file is empty.");
}
while(parser.hasNext()) { //<----- This skip a line!
console.log(parser.iterator().next().get(0).trim());
}
}
}
所以我的控制台看起来像:
line2
line4
line6
line8
line10
line12
等等……
所以我的问题是 CSVParser 在 parser.hasNext() 上跳过了一行,它不应该。
我的代码错了吗? 我很确定如果我用 ArrayList 替换解析器,迭代器会按预期工作...... 这是一个已知的错误? 如果是的话,你们能指出解决方法或更好的图书馆吗?
【问题讨论】:
-
请注意,使用 foreach 循环可能更具可读性:
for (CSVRecord csvRecord : parser)