You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Max van den Aker (JIRA)" <ji...@apache.org> on 2017/12/07 15:27:00 UTC
[jira] [Created] (CSV-218) CSVParser's iterator's hasNext throws
IOException
Max van den Aker created CSV-218:
------------------------------------
Summary: CSVParser's iterator's hasNext throws IOException
Key: CSV-218
URL: https://issues.apache.org/jira/browse/CSV-218
Project: Commons CSV
Issue Type: Bug
Components: Parser
Affects Versions: 1.5
Reporter: Max van den Aker
Priority: Minor
Fix For: Patch Needed, Discussion
Method hasNext() of the CSVParser iterator throws an IOException if the next entry in the CSV file contains a malformed record. IMHO, it's preferable that hasNext() merely indicates whether or not a next entry is available. (Method next() will then throw the exception if the record is malformed. This way it's easier to continue parsing after encountering a malformed record.)
{code:java}
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
public class CSVFileReader {
private static final String [] FILE_HEADER_MAPPING = {"id","firstName","lastName","gender","age"};
private static final String STUDENT_ID = "id";
private static final String STUDENT_FNAME = "firstName";
public static void read(String fileName) {
FileReader fileReader = null;
CSVParser csvFileParser = null;
CSVFormat csvFileFormat = CSVFormat.RFC4180.
withDelimiter(',').
withQuote('"').
withRecordSeparator("\r\n").
withIgnoreEmptyLines(true).
withAllowMissingColumnNames(false).
withFirstRecordAsHeader();
try {
fileReader = new FileReader(fileName);
csvFileParser = csvFileFormat.parse(fileReader);
} catch (Exception e) {
e.printStackTrace();
}
Iterator<CSVRecord> iter = csvFileParser.iterator();
try {
while(iter.hasNext()) {
try {
CSVRecord record = iter.next();
System.out.println(record.get(STUDENT_ID) + " " + record.get(STUDENT_FNAME));
} catch (Exception e) {
//e.printStackTrace();
}
}
} catch (Exception e) {
System.out.println("iter.hasNext() exception");
}
try {
fileReader.close();
csvFileParser.close();
} catch (Exception e) {
//e.printStackTrace();
}
}
public static void main(String[] args) {
CSVFileReader.read("./malformed.csv");
}
}
{code}
CSV sample, with entry no. 3 malformed (malformed.csv):
id,firstName
1,"Ahmed"
2,"Sara"
3,"Ali
4,"Sama"
5,"Khaled"
6,"Ghada"
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)