- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 OpenCSV 库的 3.8 版本。我使用注释将 bean 字段映射到 CSV 文件中的列。我已经让它工作到一定程度了。当日期字段为空时,它会失败。
java.lang.RuntimeException: Error parsing CSV line: 1
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
**Caused by: com.opencsv.exceptions.CsvDataTypeMismatchException**
at com.opencsv.bean.BeanFieldDate.convertLocaleInspecific(BeanFieldDate.java:216)
at com.opencsv.bean.BeanFieldDate.convert(BeanFieldDate.java:242)
at com.opencsv.bean.AbstractBeanField.setFieldValue(AbstractBeanField.java:70)
at com.opencsv.bean.CsvToBean.processField(CsvToBean.java:245)
at com.opencsv.bean.CsvToBean.processLine(CsvToBean.java:220)
at com.opencsv.bean.CsvToBean.processLine(CsvToBean.java:189)
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:166)
... 26 more
**Caused by: org.apache.commons.beanutils.ConversionException: No value specified for 'Date'
at** org.apache.commons.beanutils.converters.AbstractConverter.handleMissing(AbstractConverter.java:327)
at org.apache.commons.beanutils.converters.DateTimeConverter.convertToType(DateTimeConverter.java:327)
at org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:169)
at com.opencsv.bean.BeanFieldDate.convertLocaleInspecific(BeanFieldDate.java:214)
... 32 more
特定bean字段的注释为“required=false”但仍然不起作用。这是我使用 Java.Util.Date 类的 JavaBean 注释:
@CsvBindByName(column="Sent On", required=true)
@CsvDate(value="MM/dd/yyyy HH:mm:ss a z")
private Date sentOn;
@CsvBindByName(column="Last Activity", required=false)
@CsvDate(value="MM/dd/yyyy HH:mm:ss a z")
private Date lastActivity;
@CsvBindByName(column="Completed On", required=false)
@CsvDate(value="MM/dd/yyyy HH:mm:ss a z")
private Date completedOn;
这就是我创建 CSV 读取器和解析器的方式:
final char QUOTE_CHARACTER = '"';
ClassLoader classLoader = getClass().getClassLoader();
File newFile = new File(classLoader.getResource(fileName).getFile());
CSVReader reader2 = null;
FileReader fileReader2 = null;
List<My_Data> myList = null;
try {
HeaderColumnNameMappingStrategy<My_Data> strat = new HeaderColumnNameMappingStrategy<My_Data>();
strat.setType(My_Data.class);
CsvToBean<My_Data> csv = new CsvToBean<>();
final CSVParser csvParser = new CSVParserBuilder().withSeparator(delimiter)
.withQuoteChar(QUOTE_CHARACTER)
.withStrictQuotes(true)
.build();
fileReader2 = new FileReader(newFile);
reader2 = new CSVReaderBuilder(fileReader2).withCSVParser(csvParser)
.withVerifyReader(true)
.withKeepCarriageReturn(false)
.build();
myList = csv.parse(strat, reader2);
这是 CSV 文件数据:
"Subject","Status","Sender Name","Recipient","Sent On","Last Activity","Completed On","Completion Time (DD:HH:MM)","Created Date","Declined Date","Document ID","Reason for Declining","Expiration Date","Date Signed"
"MyCompany: Plan RCP Endorsements Select Bundle","Sent","ENV_PROD","SANDRA BULLOCK","7/21/2016 10:49:38 AM EST","7/21/2016 10:49:38 AM EST","","","7/21/2016 10:49:37 AM EST","","e05e53d8-e8bd-469e-a774-c0dec98481b2","","9/4/2016 10:49:38 AM EST",""
我是通过查看源代码发现这个错误的。我希望其他人也面临类似的问题,并且可以给我关于如何解决这个问题的建议。我喜欢这种映射方法,因为它节省了我的时间和精力。该过程只需将文件读入列表即可进行。这种方法的问题是我必须为 JavaBean 编写工厂流程。
欢迎提出建议。
谢谢
拉斯
最佳答案
我们将您遇到的问题确定为 opencsv 代码中的问题。贡献者正在重写 3.9 版本的日期处理代码,因此我们将确保代码解决您的问题。
我们尚未确定 3.9 版本的发布日期,因此,如果您立即需要某些东西并且您已经或可以自己构建代码,请转到 BeanFieldDate 类并在转换方法中替换:
if (required && StringUtils.isEmpty(value)) {
throw new CsvRequiredFieldEmptyException();
}
类似的东西
if (required && StringUtils.isEmpty(value)) {
if (required) {
throw new CsvRequiredFieldEmptyException();
} else {
return null; // or maybe empty string
}
}
看看这是否有帮助。
关于java - OpenCSV 未使用注释映射 JavaBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39136431/
我使用了 opencsv 的“http://opencsv.sourceforge.net/#maven-integration ” maven 依赖项,如下所示: net.sf.openc
我正在尝试使用 HeaderColumnNameMappingStrategy 使用 opencsv 读取 csv 文件。 Opencsv 每次都将我的第一列 csv 填充为 null。 这是我的代码
使用 OpenCSV 库,调用 StatefulBeanToCsv.write()我的空值被包裹在引号中。 例子: String[] columns = new String[] { "Col
我正在使用 AndroidStudio,我的应用程序必须读取如下所示的 CSV 文件: "Anmeldung";"1576017126809898";"1547126680978123";"";"";
在我的主课 public static void main(String[] args) { CSVWriter writer = new CSVWriter(new Fi
我使用openCSV导入文件,但通常它只读取文件的一部分。它处理包含约 5k 行的文件,但通常 20k 对他来说是个问题(即使是 1 列的 CSV)。 当我尝试使用 BufferedReader 而不
我试图使用 openCSV java 库在 csv 文件中写入一些公式数据,但它只写入每个单元格中大约 90% 的字符串。是否有任何已知问题可能导致此行为? public static void ma
我正在使用 opencsv 2.3,它似乎没有像我预期的那样处理转义字符。我需要能够处理不使用引号字符的 CSV 文件中的转义分隔符。 示例测试代码: CSVReader reader = new C
我试图从分号分隔的文件中的倒数第二行和第三列获取值。我无法坐下来获取倒数第二行和第三列的值。 我一直在寻找一种方法来实现这一目标,但没有结果。如果有人能用一个例子为我指明正确的方向,我将不胜感激。 这
我正在尝试使用 opencsv 解析 csv 文件。文件中的最后一列有一个参数,实际上是 json。该 json 包含在“”中。问题是 opencsv 正在从 json 中删除一些 "导致我的代码中断
我使用 open csv 来读取只有 2 列的 CSV,例如: "valueA1","valueB of A1" ,"valueB of A1" ,"valueB of A1" ,"valueB of
我陷入了必须读取两个不同的 csv 文件并将它们存储在单个表中的情况。 CSV 文件1: salary,date,user 121,2016-08-01,admin 121,2016-08-01,ad
我有一个 CSV 文件,其中引号内有定界符或未闭合的引号,如何让 CSVReader 忽略引号内的引号和定界符。例如: 123|Bhajji|Maga|39|"I said Hey|" I am "5
我使用的是 opencsv 3.0 版本。由于某种原因,它没有将记录写出到 CSV 文件中。它适用于 2.3 版。但是,我想使用 CSVIterator 类。感谢您的帮助。 public void
我正在尝试使用 opencsv 解析一些公共(public)数据(3.10 版)。下面是获取 CSV 并将记录映射到 POJO 列表的代码片段: URL permitsURL = new URL("h
好的,我有一个 csv 文件: Summary heading1,heading2,heading3 value1,value2,value2 value1,value2,va
我需要有关在 Java 中解析 CSV 数据时遇到的问题的建议。 我有一个 CSV 文件,其中包含以下格式的数据 name, gender, address_first_line, address_s
我编写了一个脚本,使用 tokenize 在 groovy 中解析 .csv 文件,但最终没有完全满足我的需要,我正在尝试使用 openCSV 库,但我不确定如何解析各个列。这是到目前为止我的代码:
我正在使用 openCSV 的 CsvToBean 类。该 bean 具有日期字段。 @CsvDate(value = "yyyy-MM-dd") @CsvBindByPosition(positio
我有以下 CSV 文件, "id","Description","vale" 1,New"Account","val1" 我无法使用 OpenCSV 读取上述 CSV 文件。它无法读取 New"Acc
我是一名优秀的程序员,十分优秀!