问题标签 [supercsv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1238 浏览

java - 使用 SuperCSV 清理单元格值

从 supercsv 中的 csv 清理字段的最佳方法是什么?例如 First_Name 列:修剪字段、首字母大写、删除各种字符(引号、逗号、星号等)。是写一个像 FmtName() 这样的自定义 CellProcessor 吗?也许另一个 FmtEmail() 将所有内容小写,删除某些无效字符?

0 投票
2 回答
823 浏览

java - 官方 supercsv dozer 示例不适用于 Play — Play 2.1.1,Java

更新:

现在我发现了一些非常奇怪的东西,当我将编译的测试类直接放入“super-csv-dozer-2.1.0.jar”中时,它的工作原理与svn repo中的结构相同。但是一旦我使用我自己的包,它就不起作用了。我总是像这样使用整个路径:myPackage.csv.SurveyResponse.class 我错过了什么?为什么它可以在普通的 Java 项目中工作,但不能在 Play 项目中工作?我还在 eclipse 之外的不同目录中尝试了它,并且没有任何来自 svn repo 的签出可能会混淆路径。我尝试的另一件事是将 Writing.class 放入不同的包中,但没有帮助。

原始问题:

我试图在 Play 项目中将 SuperCSV 与 Dozer 一起使用。官方的 supercsv 示例在单独的 Java 项目中运行良好。但是,当我将代码和所需的 SuperCSV Jars 放入新创建的 Play 项目中时,我总是在这行代码中得到 SurveyResponse.class 的 ClassNotfoundException: beanWriter.configureBeanMapping(myPackage.csv.SurveyResponse.class, FIELD_MAPPING);

这是我的项目结构的截图:http: //oi44.tinypic.com/mrqp7s.jpg

我确保所有 JARS 都可用,我将它们非托管放入 /lib 文件夹,它们在 eclipse 中可用,并且在编译过程中没有出现错误。我调试了代码,找到了 SurveyResponse.class 并且初始化了 beanWriter。所以不知何故,Play 必须在后台做一些魔法来触发这个错误。在后台播放什么可能会触发这种奇怪的行为?我能做些什么来解决这个问题?

我对示例所做的更改使其适用于 Play:我使用了与官方 supercsv 示例完全相同的代码。我所做的唯一更改是删除 Writing.main(..) 方法并将方法 Writing.writeWithDozerCsvBeanWriter() 和 Writing.partialWriteWithCsvDozerBeanWriter() 设置为公共,以便可以从应用程序控制器访问它。当然,我将所有类中的包名更改为 package myPackage.test;

示例链接:见评论,由于声誉低,我不能添加超过 2 个链接。

控制器:

在写作类中触发错误的代码:

堆栈跟踪:

额外信息: 我仍然无法解决问题,但这里有一些额外信息来缩小问题范围:当我删除 configureBeanMapping 方法调用时,csv 标头已成功写入文件(请参见下面的代码)。当我对填充的 SurveyResponse 对象执行 System.out.println() 时,SurveyResponse 类也在工作(参见下面的代码)。所以它不是包或类名的问题。

仅写入标头的修改后的代码:

0 投票
1 回答
1367 浏览

csv - 在 superCSV 中同时使用 CSVListReader 和 CSVBeanreader

我想读取所有具有固定列号但 2 个不同文件具有 2 个不同列号的不同 CSV 文件。所有文件都有一个标题行。所以我首先使用 CSVListReader 来获取标题和列号,然后构造单元处理器和 CSV BeanReader 以将实际行映射到 POJO。我首先尝试通过将 InputStreamReaders 传递给 superCsv 读取器构造函数来使其工作,但它不起作用。但与 FileReaders 或 BufferedReaders 一起工作正常。在这种情况下使用 InputStremReaders 是错误还是没有意义?

这是工作代码示例

提前致谢

0 投票
1 回答
1087 浏览

java - SuperCSV 中的可选 ParseDate SuperCsvCellProcessorException 是否有解决方法?

我在 java 中使用 SuperCSV 来读取 csv 文件。我有一列包含日期,但可能不会填充记录,因此我将其设置为可选。在我的 CellProcessor 中,我将字段定义为

当 ParseDate 遇到一个空单元格时,它会返回“...SuperCsvCellProcessorException:' ' 无法解析为日期。”

在这种情况下如何继续处理 parseDate?

0 投票
1 回答
4830 浏览

java - 如何在 supercsv getHeader 中使用编码

我正在使用 supercsv 2.1.0 解析包含德语单词的 CSV 文件。

给定的 CSV 文件在第一行有一个标题。在这个标题中有一些变异的元音,如:Ä,ä, Ü,ö 等。例如:Betrag;Währung;信息

在我的编码中,我试图像这样获取 csv 的标题:

这是我对标头数组的问题。所有元音突变的标头都未使用 utf8 字符集正确编码。

有没有办法正确读取标题?

这是一个伪单元测试:

亲切的问候,亚历克斯

0 投票
1 回答
700 浏览

mapping - 超级 CSV 和多 bean 映射

我遇到了使用 Super CSV 映射多个 bean 的问题。我有一个 csv 文件,其中包含多个 bean 的信息(每行)。但正如我从网站上的示例中看到的那样,只能将每一行映射到一个 bean(而不是两个或多个 bean)。

有没有办法做到这一点?我能想到的唯一方法是创建一个新bean,包含我需要的所有bean并进行深度映射,即:

我没有尝试这个,因为我想确定没有其他/更好的方法。

感谢您的帮助丹尼尔

0 投票
1 回答
1657 浏览

java - 依赖于多列的 SuperCSV Cellprocessor

我遇到了 supercsv 库,它似乎是一个非常好的工作。但是我有一个问题,我无法用他们网站上提供的文档来回答,想知道这里是否有人可以提供帮助。

基本上我有一个 csv 文件,其中有一列仅在另一列设置为特定值时出现。所以一个例子如下:

IsBirthDate,出生日期

是的,11/05/1985

是的,1999 年 12 月 1 日

你明白我的意思。有没有办法创建一个可以考虑这种依赖关系并在找到这样的行时抛出异常的单元处理器:

不,1968 年 12 月 9 日

干杯

0 投票
1 回答
2291 浏览

java - Excel 在使用 Super CSV 创建的 CSV 文件中不显示变音符号

我正在使用 Super CSV 来创建 CSV 文件。当我写特殊字符(如变音符号)时,ï或者î当我使用 Excel 打开它时,它会在生成的 CSV 中中断。当我使用 Notepad++ 打开同一个文件时,它完美地显示了变音符号。

知道可能是什么原因吗?我已经指定了 UTF-8 编码。有什么我想念的吗?

0 投票
1 回答
615 浏览

java - 在 Groovy 中使用参数动态创建方法

例如,我有一个要求,我使用 SuperCSV 读取 csv 文件并映射到对象。

SuperCSV 有一个要求,如果标头指定字段名称“firstName”,则它需要在类中具有 setFirstName() 方法,否则它会引发异常。

现在,如果我使用 Groovy bean,那么我不需要声明所有这些方法,只需声明变量应该适用于 SuperCSV。

但我一直在寻找一个更动态的解决方案,我们甚至不必声明这些变量。

例如,只需动态创建一个对象,并使用 groovy 的动态方法创建功能 SuperCSV 将能够找到设置器。

我查看了各种选项,例如 Expando、ExpandoMetaClass,但这些并没有达到我的目的。

任何答案将不胜感激。

这是对我有用的代码片段,可以真正有助于减少大量代码和不必要的逻辑:

这适用于 supercsv,但可用于语法几乎没有变化的通用 java 对象

0 投票
1 回答
2255 浏览

java - 如何编写列表到 csv 文件并使用 supercsv 读回

我正在使用 supercsv CsvBeanWriter 将值写入 csv 文件。

样本类:

我得到的输出是:

请注意如何List<String> phoneNumbers写出[]

我的问题是如何使用 supercsv 将其读回 Employee 类(bean)。

我尝试使用CsvBeanReader&CsvDozerBeanReader但无法读取List<String>.

我得到了非法参数异常。将感谢任何指点!

完整代码: