[ https://issues.apache.org/jira/browse/CSV-213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16095718#comment-16095718 ]
Gary Gregory commented on CSV-213: ---------------------------------- This is normal behavior with the current architecture: The {{iterator()}} API presents an object that is backed by data in the {{CSVParser}} as the parser is _streaming_ over the file. The {{CSVParser}} is like a forward-only stream. When you create a new {{Iterator}} you are only created a new view on the same position in the parser's stream. For the behavior you want, you need to open a new {{CSVParser}}. You can also abreviate the parser creation like this: {code:java} CSVParser parser = csvFormat.parse(new InputStreamReader(new FileInputStream(csvFile), StandardCharsets.UTF_8)); {code} > CSVParser#iterator()#hasNext() fails > ------------------------------------ > > Key: CSV-213 > URL: https://issues.apache.org/jira/browse/CSV-213 > Project: Commons CSV > Issue Type: Bug > Components: Parser > Affects Versions: 1.4 > Environment: linux/osx > Reporter: Lukas Vasek > Priority: Blocker > Attachments: 999751170.patch.csv > > > 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? > {code:java} > 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")); > } > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)