我一直在尝试读取 csv 并将字段添加到数据结构中。但是,其中一排没有正确形成,我知道这一点。我只想跳过这一行并继续前进。但是,即使我发现了异常,它仍然在打破循环。知道我在这里缺少什么吗?
我的.csv:
"id","name","email"
121212,"Steve","steve@example.com"
121212,"Steve","steve2@example.com",,
121212,"Steve","steve@example.com"
我的代码:
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
public static void main(String[] args) throws Exception{
Path path = Paths.get("list2.csv");
CsvMapper mapper = new CsvMapper();
CsvSchema schema = CsvSchema.emptySchema().withHeader();
MappingIterator<Object> it = mapper.reader(Object.class)
.with(schema)
.readValues(path.toFile());
try{
while(it.hasNext()){
Object row;
try{
row = it.nextValue();
} catch (IOException e){
e.printStackTrace();
continue;
}
}
} catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace();
}
}
例外:
com.fasterxml.jackson.core.JsonParseException: Too many entries: expected at most 3 (value #3 (0 chars) "")
at [Source: java.io.InputStreamReader@12b3519c; line: 3, column: 38]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1486)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:518)
at com.fasterxml.jackson.dataformat.csv.CsvParser._handleNextEntryExpectEOL(CsvParser.java:601)
at com.fasterxml.jackson.dataformat.csv.CsvParser._handleNextEntry(CsvParser.java:587)
at com.fasterxml.jackson.dataformat.csv.CsvParser.nextToken(CsvParser.java:474)
at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapObject(UntypedObjectDeserializer.java:592)
at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:440)
at com.fasterxml.jackson.databind.MappingIterator.nextValue(MappingIterator.java:188)
at CSVTest.main(CSVTest.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
java.lang.ArrayIndexOutOfBoundsException: 3
at com.fasterxml.jackson.dataformat.csv.CsvSchema.column(CsvSchema.java:941)
at com.fasterxml.jackson.dataformat.csv.CsvParser._handleNamedValue(CsvParser.java:614)
at com.fasterxml.jackson.dataformat.csv.CsvParser.nextToken(CsvParser.java:476)
at com.fasterxml.jackson.databind.MappingIterator.hasNextValue(MappingIterator.java:158)
at CSVTest.main(CSVTest.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)