首页 / JAVA / java – 跳过格式错误的csv行
java – 跳过格式错误的csv行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 跳过格式错误的csv行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3461字,纯文字阅读大概需要5分钟。
内容图文
![java – 跳过格式错误的csv行](/upload/InfoBanner/zyjiaocheng/809/c867876e5e174a78a88297c231e53456.jpg)
我一直在尝试读取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)
解决方法:
使用Jackson 2.6处理readValues()已经过改进,试图从处理错误中恢复,这样在很多情况下你可以再试一次,以读取以下有效行.因此,请确保至少使用2.6.2版.
早期版本也没有恢复,通常使其余内容无法处理;这可能就是你的情况.
另一种可能性,假设你的问题不是无效的CSV,而是一个不可映射为POJO(至少定义为POJO的方式),就是将内容读取为String []序列,并手动处理映射.杰克逊的CSV解析器本身并不介意任何数量的列,更高级别的数据绑定就像找到它无法识别的“额外”内容.
内容总结
以上是互联网集市为您收集整理的java – 跳过格式错误的csv行全部内容,希望文章能够帮你解决java – 跳过格式错误的csv行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。