gpt4 book ai didi

java.lang.ClassCastException : java. 使用 Univocity 时,util.Date 无法转换为 java.lang.String

转载 作者:行者123 更新时间:2023-11-30 02:47:13 31 4
gpt4 key购买 nike

我正在尝试读取 java.sql.Date 字段并使用 Univocity 将其解析为 java bean,代码如下:

public class Example {

public static void main(final String[] args) throws FileNotFoundException {
final BeanListProcessor<Person> rowProcessor = new BeanListProcessor<Person>(Person.class);

final CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.setProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(false);
parserSettings.getFormat().setDelimiter('|');

final String line = "0|John|12-04-1986";
final CsvParser parser = new CsvParser(parserSettings);
parser.parseLine(line);

final List<Person> beans = rowProcessor.getBeans();

for (final Person person : beans) {
// Expected print: Birthday: 12-04-1986
System.out.println("Birthday: " + person.getBirthDate());
}
}
}

但我收到以下异常由以下原因引起:java.lang.ClassCastException:java.util.Date无法转换为java.lang.String以及com.univocity的附加信息.parsers.common.DataProcessingException:使用 parser.parseLine(line 解析行时,使用转换 com.univocity.parsers.conversions.TrimConversion 转换值“Sat Apr 12 00:00:00 CEST 1986”时出错);

我试图将日期表示为它在行中的位置,例如“12-04-1986”,我尝试提供转换“dd-MM-yyyy”,不幸的是没有成功。

为了获得“生日:12-04-1986”的预期 syso,我的代码中缺少什么?

编辑:使用 java.util.Date

人员类别:

// using the correct Date object!
import java.util.Date;

import com.univocity.parsers.annotations.Format;
import com.univocity.parsers.annotations.Parsed;

public class Person {

@Parsed(index=0)
private Integer id;

@Parsed(index=1)
private String name;

@Parsed(index=2)
@Format(formats = "dd-MM-yyyy")
private Date birthDate;

//getters and setters ommited
}

将 Date 对象更改为 java.util.Date 并在 java.util.Date 对象上应用正确的日期格式时,打印会正确显示预期结果。

最佳答案

第一个问题是您定义的转换顺序:

Conversions.toDate("dd-MM-yyyy"), Conversions.trim()

这会生成 Date对象,然后应用 String.trim()对日期而不是 String 进行操作,这会导致您刚刚收到的错误。

如果您更改顺序,这应该有效:

Conversions.trim(), Conversions.toDate("dd-MM-yyyy")

但是,您的 Person类必须有其 birthDate@Parsed 注释的字段否则你会得到 null .

添加 @Format 应该会更容易您的birthDate上的注释字段而不是应用该转换序列。您可以像这样声明您的类:

public class Person{
@Parsed
String id;

@Parsed
String name;

@Parsed
@Format(formats = "dd-MM-yyyy") //notice that multiple formats are supported
Date birthDate;
}

最后,请注意解析器默认会修剪值,因此您无需使用修剪转换或 @Trim注释,除非您在设置中禁用修剪。

希望这有帮助。

关于java.lang.ClassCastException : java. 使用 Univocity 时,util.Date 无法转换为 java.lang.String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39834895/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com