Details
-
Bug
-
Status: Resolved
-
Blocker
-
Resolution: Fixed
-
1.4
-
None
-
None
-
linux/osx
-
Important
Description
Hello,
with class sample below and attached fail the program fails. Problem is that iterator wrongly computes the records. If hasNext is true then next record should be fetched.
+ wouldn't it be better to provide currentRecord also?
public class Test { private static final CSVFormat csvFormat = CSVFormat.DEFAULT .withDelimiter(';') .withFirstRecordAsHeader() .withRecordSeparator('\n') .withQuoteMode(QuoteMode.ALL); private static Optional<String[]> createEndChannel(File csvFile) { try (Reader reader = new InputStreamReader(new FileInputStream(csvFile), StandardCharsets.UTF_8); CSVParser parser = new CSVParser(reader, csvFormat)) { if (parser.iterator().hasNext()) { System.out.println(parser.getCurrentLineNumber()); System.out.println(parser.getRecordNumber()); // get only first record we don't need other's CSVRecord firstRecord = parser.iterator().next(); // this fails return Optional.of(null); } } catch (IOException e) { throw new RuntimeException("Error while adding end channel to csv", e); } return Optional.empty(); } public static void main(String[] args) { createEndChannel(new File("/tmp/999751170.patch.csv")); //createEndChannel(new File("/tmp/129441.csv")); } }