混乱的 CSV 会导致异常

2023-12-15

我想我发现了一个错误。或者也许不是,但 Super CSV 无法很好地处理。

我正在使用 MapReader 解析包含 41 列的 CSV 文件。但是,我收到了 CSV - 并且为我提供 CSV 的 Web 服务弄乱了一行。 “标题”行是一个制表符分隔的行,包含 41 个单元格。

“错误行”是一个由制表符分隔的包含 36 个单元格的行,并且内容没有任何意义。

这是我正在使用的代码:


InputStream fis = new FileInputStream(pathToCsv);
InputStreamReader inReader = new InputStreamReader(fis, "ISO-8859-1");

ICsvMapReader mapReader = new CsvMapReader(inReader, new CsvPreference.Builder('"','\t',"\r\n").build());
final String[] headers = mapReader.getHeader(true);
Map<String, String> row;
while( (row = mapReader.read(headers)) != null ) {

    // do something


}

在上面提到的行中执行 mapReader.read(headers) 时出现异常。这是例外:

org.supercsv.exception.SuperCsvException: 
the nameMapping array and the sourceList should be the same size (nameMapping length = 41, sourceList size = 36)
context=null
at org.supercsv.util.Util.filterListToMap(Util.java:121)
at org.supercsv.io.CsvMapReader.read(CsvMapReader.java:79)
at test.MyClass.readCSV(MyClass.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

你觉得我应该怎么做 ?

我不希望整个应用程序崩溃,只是因为一行被搞乱了,我宁愿跳过该行。


这是一个很好的问题!作为一名超级 CSV 开发人员,我将研究在website.

您可以保持简单并使用 CsvListReader (它不关心有多少列),然后自己创建 Map :

public class HandlingExceptions {

    private static final String INPUT = 
        "name\tage\nTom\t25\nAlice\nJim\t44\nMary\t33\tInvalid";

    public static void main(String[] args) throws IOException {

        // use CsvListReader (can't be sure there's the correct no. of columns)
        ICsvListReader listReader = new CsvListReader(new StringReader(INPUT), 
            new CsvPreference.Builder('"', '\t', "\r\n").build());

        final String[] headers = listReader.getHeader(true);

        List<String> row = null;
        while ((row = listReader.read()) != null) {

            if (listReader.length() != headers.length) {
                // skip row with invalid number of columns
                System.out.println("skipping invalid row: " + row);
                continue;
            }

            // safe to create map now
            Map<String, String> rowMap = new HashMap<String, String>();
            Util.filterListToMap(rowMap, headers, row);

            // do something with your map
            System.out.println(rowMap);
        }
        listReader.close();
    }
}

Output:

{name=Tom, age=25}
skipping invalid row: [Alice]
{name=Jim, age=44}
skipping invalid row: [Mary, 33, Invalid]

如果您担心使用超级 CSVUtil类(它可能会改变 - 它实际上是一个内部实用程序类),你可以按照我的建议组合 2 个阅读器here.

你可以尝试捕捉SuperCsvException,但您最终可能会抑制的不仅仅是无效数量的列。我建议捕获的唯一超级 CSV 异常(尽管不适用于您的情况,因为您没有使用单元处理器)是SuperCsvConstraintViolationException,因为它表明文件的格式正确,但数据不满足您的预期约束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

混乱的 CSV 会导致异常 的相关文章

  • 从文本文件中读取阿拉伯字符

    我完成了一个项目 在该项目中我读取了用记事本编写的文本文件 我的文本文件中的字符是阿拉伯语 文件编码类型是UTF 8 当在 Netbeans 7 0 1 中启动我的项目时 一切似乎都正常 但是当我将项目构建为 jar 文件时 字符以这种方式
  • 在 Java 正则表达式中获取多个模式的重叠匹配

    我有同样的问题这个链接 https stackoverflow com questions 18751486 matching one string multiple times using regex in java 但有多种模式 我的正
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • 重写 getPreferredSize() 会破坏 LSP

    我总是在这个压倒一切的网站上看到建议getPreferredSize 而不是使用setPreferredSize 例如 如前面的线程所示 对于固定大小的组件 使用重写 getPreferredSize 而不是使用 setPreferredS
  • 无法访问“不安全”java方法的java表达式语言

    我正在开发一个项目 让用户向服务器提交小 脚本 然后我将执行这些脚本 有很多脚本语言可以嵌入到Java程序中 例如mvel ognl uel clojure rhino javascript等 但是 据我所知 它们都允许脚本编写者调用Jav
  • 记录共享和映射的诊断上下文

    据我所知 其他人做了什么来解决 Commons Logging 项目 针对 NET 和 Java 不支持映射或嵌套诊断上下文这一事实 执行摘要 我们选择直接使用实现者日志框架 在我们的例子中为 log4j 长答案 您是否需要一个抽象日志框架
  • JUnit5 平台启动器 API - 如果没有至少一个测试引擎,则无法创建启动器

    我正在尝试升级我们的自动化测试套件的测试能力以接受 JUnit5 测试并遵循JUnit 平台启动器 API 说明 https junit org junit5 docs current user guide launcher api我收到错
  • 如何在 HandlerInterceptorAdapter 中添加 HttpServletRequest 标头?

    我正在尝试将授权标头添加到我的请求中 作为我们切换环境时的临时解决方法 我试图在扩展 HandlerInterceptorAdapter 的拦截器中处理它 我使用 MutableHttpServletRequest 类制作here http
  • 如何将 Java 地图转换为在 Scala 中使用?

    我正在开发一个 Scala 程序 该程序调用 Java 库中的函数 处理结果并生成 CSV 有问题的 Java 函数如下所示 Map
  • Java:SortedMap、TreeMap、可比较?如何使用?

    我有一个对象列表 需要根据其中一个字段的属性进行排序 我听说 SortedMap 和 Comparator 是实现此目的的最佳方法 我是否要与正在排序的类实现 Comparable 还是创建一个新类 如何实例化 SortedMap 并传入
  • 纱线上的火花,连接到资源管理器 /0.0.0.0:8032

    我正在我的开发机器 Mac 上编写 Spark 程序 hadoop的版本是2 6 spark的版本是1 6 2 hadoop集群有3个节点 当然都在linux机器上 我在idea IDE中以spark独立模式运行spark程序 它运行成功
  • 用于层次结构树角色的 Spring Security / Java EE 解决方案

    我知道 Spring Security 非常适合标准角色和基于权限的授权 我不确定的是这种情况 系统中管理着 10 000 名员工 员工被组织成组织结构图 跨部门的谁向谁报告的树 其中一些员工是用户 这些用户仅被允许访问其职责范围内的员工
  • 嵌套字段的 Comparator.comparing(...)

    假设我有一个这样的域模型 class Lecture Course course getters class Course Teacher teacher int studentSize getters class Teacher int
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • BadPaddingException:无效的密文

    我需要一些帮助 因为这是我第一次编写加密代码 加密代码似乎工作正常 但解密会引发错误 我得到的错误是 de flexiprovider api exceptions BadPaddingException 无效的密文 in the 解密函数
  • 使用 PC/SC 读卡器验证 Ultralight EV1

    我在尝试使用 Java 中的 PC SC 读卡器 特别是 ACR1222L 验证 Ultralight EV1 卡时遇到问题 我能够使用 ISO 14443 3 标签的相应 APDU 在不受保护的标签上进行写入和读取 但是 我找不到运行 P
  • Java/MongoDB 按日期查询

    我将一个值作为 java util Date 存储在我的集合中 但是当我查询以获取两个特定日期之间的值时 我最终得到的值超出了范围 这是我的代码 插入 BasicDBObject object new BasicDBObject objec
  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac

随机推荐

  • 将实例的一个属性与一组其他实例进行比较

    我正在尝试编写一个实例方法Card将单张卡与数组进行比较的类 该类具有一些属性 例如 shape and color The otherCards数组中充满了此类的其他实例 这些实例也有它们的shapes and colors 现在 我想编
  • 显示所有打开的 RODBC 连接

    有谁知道如何做到这一点 showConnections 不会列出来自 odbcConnect 的任何打开的连接 您可以通过以下方式缩小搜索范围 这将返回当前环境中 RODBC 类的所有变量 envVariables lt ls bools
  • MongoDB .Net 驱动程序 2.0 Pull(删除元素)

    你能帮我用 2 0 驱动程序正确运行 拉 删除 吗 我有一个像这样的集合 我想通过关注者字段删除第一个名为 fethiye 的关注者 id ObjectId 554e05dfc90d3d4dfcaa2aea username bodrum
  • 为什么设置 MenuItem.InputGestureText 不会导致当我执行输入手势时激活 MenuItem?

    我想实现键盘快捷键MenuItem 我使用了下面的代码
  • 在 #define 宏中转义 # 符号?

    在不涉及血淋淋的细节的情况下 我想使用 define宏将扩展为 include但 符号使预处理器感到困惑 因为它认为我想引用一个参数 例如 我想做这样的事情 define MACRO name include name foo 并这样使用它
  • 在 Azure 上找不到“Microsoft.SqlServer.Types”版本 10 或更高版本

    我正在尝试在 ASP NET MVC 4 中创建一个 Web api 该 webapi 使用实体框架 5 空间类型 并且我编写了一个非常简单的代码 public List area GetAllAreas List area aList d
  • 在 React 功能组件中使用 Cornerstone.js 中的堆栈滚动工具时,如何访问“currentImageIdIndex”?

    我目前正在 React 组件中成功显示一堆图像 但不确定在哪里放置事件侦听器以便访问currentImageIdIndex滚动时 import React useEffect useRef useCallback from react im
  • fancybox 图像上的自定义宽度和高度

    我想知道是否可以在 fancybox 图像上设置自定义宽度和高度 作为标准 fancybox 的宽度和高度相对于图像的宽度和高度而变化 但我希望所有图像的宽度为 800 高度为 600 我想创建一些与 Facebook 上的图像框相似的内容
  • 通过使用最小交换交换相邻元素来对序列进行排序

    我们有一个未排序的 N 个数字序列 1 2 3 4 N 我们可以通过按特定顺序交换相邻元素来对整个序列进行排序 给定一个序列 如何计算对序列进行排序所需的最小可能交换 作为示例 请考虑序列 4 2 5 3 1 对此进行排序的最佳方法是按以下
  • 使用REGEX用SED解析括号

    我正在寻找命令sed它转换这个输入流 dummy key1 key2 dummy key3 dummy key4 dummy dummy key5 dummy dummy dummy key6 dummy key7 dummy 进入这个 k
  • 下一个更高的素数和回文数

    是否有关于从给定的整数中求解下一个更高的素数和回文数的建议 这是我正在尝试的片段 但它有点慢 请建议我是否有任何好的算法可以测试 usr bin python def next higher n while True s str n if
  • 报告设计无效。未找到字段 Jasper 报告

    我正在尝试创建一个基本的碧玉报告JRBeanCollectionDataSource 在那里 我有一个 javabean 内的对象列表 public class Course private int id private List
  • 计算pandas数据框中每列值的变化

    有没有什么巧妙的方法来计算 pandas 数据框中每列值的变化次数 我不想在每一列上循环 例如 import pandas as pd frame pd DataFrame time 1234567000 1234567005 123456
  • AngularJs指令添加属性,事件不被触发

    大家早上好 我对这个指令有点困惑 我想要的是从 getProperties 函数接收一个 JSON 字符串 例如 class someclass ng change someChange ng click someCLick 该指令将创建
  • Android 寻呼机暂停问题

    我正在使用 Pager 和兼容性库构建一个应用程序 每当我尝试暂停应用程序时 例如 当我回到桌面时 我的应用程序都会强制关闭 我从未遇到过此类错误 因此我不知道如何解决它 我将向您展示我的代码 而我确信您不必查看它 public class
  • 使用Functional Swift 求斐波那契项的总和

    我正在尝试学习函数式 Swift 并开始从 Project Euler 做一些练习 甚至斐波那契数列 问题2 斐波那契数列中的每一项新项都是通过添加前两项而生成的 从 1 和 2 开始 前 10 项将是 1 2 3 5 8 13 21 34
  • 删除R中的多个值

    我有一个大约有 14 000 行和 40 列的数据集 我试图删除数据集第一列中具有以下值的所有行 但是当我执行类似操作时 filter data set data set DMS rem rem lt c 02M177 02M267 02M
  • EJB 3.1 依赖注入失败

    我创建了一个无状态会话 bean 如下所示 WebServlet name ProductController urlPatterns ProductController public class ProductController ext
  • MS Teams 活动源通知不会发送到移动设备

    我已经成功实施了活动提要通知在我的 MS Teams 应用程序 选项卡 中 问题是 我在移动设备上没有收到它们 既没有推送通知 也没有活动源中的项目 Web 和桌面上的活动源填充了相同的项目 但移动设备上没有任何内容 Web 和桌面版本工作
  • 混乱的 CSV 会导致异常

    我想我发现了一个错误 或者也许不是 但 Super CSV 无法很好地处理 我正在使用 MapReader 解析包含 41 列的 CSV 文件 但是 我收到了 CSV 并且为我提供 CSV 的 Web 服务弄乱了一行 标题 行是一个制表符分