- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 CsvDozerBeanWriter
将 bean 实例写入 CSV 文件。继example在将 bean 写入 CSV 之前,我使用了 CsvDozerBeanWriter#configureBeanMapping(...)
。一切正常,除非 bean 的 String
属性为空(而不是 null
)。我发现在写入之前,这些属性不会从 bean 复制到中间 CsvDozerBeanData
实例。这会导致异常,因为列数与单元处理器的数量不匹配。
深入研究后,我发现 configureBeanMapping(...)
执行的操作相当于将 Dozer 的 map-empty-string
设置为 False
。因此,所有空字符串都不会被映射(null
字符串仍然会被映射)。
我该如何克服这个问题?提供我自己的 DozerBeanMapper
(如 documentation 所说)是最好的方法吗?
以下是我收到的异常的详细信息:
org.supercsv.exception.SuperCsvException: The number of columns to be processed (7) must match the number of CellProcessors (12): check that the number of CellProcessors you have defined matches the expected number of columns being read/written
context={lineNo=2, rowNo=2, columnNo=1, rowSource=[a, b, c, d, e, f, g]}
org.supercsv.exception.SuperCsvException: The number of columns to be processed (7) must match the number of CellProcessors (12): check that the number of CellProcessors you have defined matches the expected number of columns being read/written
context={lineNo=2, rowNo=2, columnNo=1, rowSource=[a, b, c, d, e, f, g]}
at org.supercsv.util.Util.executeCellProcessors(Util.java:78)
at org.supercsv.io.dozer.CsvDozerBeanWriter.write(CsvDozerBeanWriter.java:133)
该 bean 具有 String
属性 a
到 l
。属性 h
到 l
是空字符串。
这是一个test case 。
最佳答案
如果禁用了map-empty-string
,则传递给单元处理器的值应该为null
(即,您很可能会从该列的处理器收到一个错误,指出该值不应该为null - 这不是处理器数量错误的异常(exception))。如果您可以发布异常详细信息来澄清这一点,那就太好了:)
使用 CsvDozerBeanWriter
运行一些测试后,Dozer 映射 API 似乎已在 Dozer 5.4.0 中修复(请参阅 this 提交)。
在 Dozer 5.3.2 中,""
映射到 null
在 Dozer 5.4.0 中,""
映射到 ""
不幸的是,Dozer 5.4.0 没有详细的发行说明(并且 GitHub 上没有创建任何问题 - 它们仍然处于从 SourceForge 迁移的过程中),以便更容易找到答案。
如果您可以升级到 Dozer 5.4.0,那么应该可以解决您的问题。我计划在下一个版本(明年初)中将 Super CSV 升级到 Dozer 5.4.0,但现在没有什么可以阻止您覆盖从 Super CSV 继承的版本。
如果您由于某种原因被困在 Dozer 5.3.2 上,那么我建议您:
编写自己的 Writer 来扩展 CsvDozerBeanWriter
(但重写 configureBeanMapping()
方法以提供启用了 map-empty-string
的 MappingBuilder
)
使用 CsvBeanWriter
(如果您不使用索引/深度映射)
仅供引用,我在 5.3.2 中遇到了映射 API 的另一个错误,这意味着我在编写 CsvDozerBeanWriter
时必须在类级别而不是映射级别启用 map-null
- 这也在 5.4.0 中得到了修复(尽管 Super CSV 可以在任一版本的 Dozer 中正常运行)。
关于java - 使用 `String` 时,如何告诉 SuperCSV 映射空的 `CsvDozerBeanWriter` 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036441/
我想使用 SuperCSV CellProcessor 用逗号作为小数分隔符(',' 而不是 '.')解析 double 数 我想将第一个元素 (0,35) 解析为 Double 0,35;40000
我正在考虑使用 SuperCSV 检查我收到的一些文件的内容。文件的格式是这样的,它有一个标题记录,后面是数据记录,然后是 CRC32 校验和值。 例如 ABC|2|20130115150327| 1
我有一个采用这种格式 RES,2016-02-23_18:01:27 的 CSV 文件,我想将这些值映射到一个具有 String 和日历类型属性。在编写单元处理器方法时,有一个将值解析为 Date 的
我正在开发一款软件,其中输入是 csv 文件数据,单个文件中可以包含 90k 多行数据。 只是为了通知文件根本不会有标题行,它将以数据本身开始。 通过谷歌搜索,我找到了 super csv 和推土机映
我的用例是从 CSV 读取对象,对对象执行一些修改,然后将它们写入另一个 CSV。我尝试修改 supercsv 示例如下,但收到 SuperCsvConstraintViolationExceptio
使用 CsvMapWriter,如果我添加一个标题,比如“Region”,然后用键“region”和值“Northeast”写一行,它不会被添加到 SuperCSV 输出中。我假设它没有找到一个有效的
我有一个实用程序类,我为我的 Spring Controller 创建调用以使用 SuperCSV 库(http://supercsv.sourceforge.net/)从一组 bean 生成 CSV
此示例直接来自 http://super-csv.github.io/super-csv/examples_reading.html 的文档不编译。新 CellProcessor[]{...} 中的所
给出以下 csv 数据示例 姓名、地址、 sibling 、 sibling 、 sibling 约翰、MainSt、莎拉、迈克、格雷格 以及我想要将数据解析成的示例 POJO public clas
我正在使用 superCSV 将 bean 数据导出到 CSV。我希望每个单元格都用双引号引起来,而不仅仅是那些带有特殊字符的单元格。 现在,使用 CsvPreference.EXCEL_NORTH_
我必须处理非常大的文本文件(例如 5 TB 大小)中的数据。处理逻辑使用 supercsv 来解析数据并对其进行一些检查。显然由于规模很大,我们计划使用 hadoop 来利用并行计算。我在我的机器上安
是否可以向 CSV 文件添加新行,而不是覆盖最后一行? 这是我想添加新行时调用的方法: private static void writeWithCsvMapWriter() throws Excep
我创建了一个 Web 应用程序模块来将 CSV 文件导入数据库。导入过程结束后,用户将显示摘要,例如输入文件中的记录总数、导入到数据库的良好记录总数以及拒绝记录总数。用户可以下载成功和错误记录进行验证
实际上,我有一个类 ArticleModele,我在其中存储 .csv 列的内容,但我不知道如何访问与 .csv 中的特定行相对应的类的特定实例。这是我的代码: public static Arti
我正在查看 Super CSV website 中的这个示例这表明 dateofbirth 是可选列。如果我有多个可选列,会发生什么情况?代码将如何变化? private static void r
在 supercsv 中清理 csv 字段的最佳方法是什么?例如 First_Name 列:修剪字段、将第一个字母大写、删除各种字符(引号、逗号、星号等)。是要写一个像FmtName()这样的自定义C
我正在研究 CSV 解析器要求,并且正在使用 supercsv 解析器库。我的 CSV 文件可以有 25 列(用制表符 (|) 分隔)和最多 100k 行以及附加标题行。 我想忽略纯空白行和包含少于
@Carlo V. Dango我已经简化了我的问题并且我已经阅读了文档——不要 panic 的好建议。尽管如此,我还是有问题。帮我解决一个,它会解决所有问题。谢谢。 问题:当我有一个缺少非字符串字段的
有没有办法在抛出单元处理器异常后继续从 CSV 读取?我试图从文件中获取所有好的数据,用它做我需要的事情,并向用户报告存在哪些坏行(如果有)。例如,如果我有一个只有两列(名称、 Activity )的
我正在尝试读取 CSV 文件,然后根据该 CSV 文件创建一个新对象。我可以使用 SuperCSV 库成功地做到这一点,但如果发生错误(例如特定单元格为空),它会抛出错误(如预期)。我试图收集 Arr
我是一名优秀的程序员,十分优秀!