这个周末,我尝试了你的伟大框架,并希望在生产中使用它。不幸的是,我的Employee Bean有一个属性sexuality,它的类型是enum。由于某种原因,集成的官方ParseEnum单元处理器无法在读取.csv文件时解析性属性。你能查一下这个吗?
错误消息
Exception in thread "main" org.supercsv.exception.SuperCsvCellProcessorException: ' BI' could not be parsed as a enum of type test.supercsv.Sexuality
processor=org.supercsv.cellprocessor.ParseEnum
context={lineNo=2, rowNo=2, columnNo=5, rowSource=[1, Pankaj Kumar, CEO, 5,000USD, BI]}
at org.supercsv.cellprocessor.ParseEnum.execute(ParseEnum.java:146)
at org.supercsv.util.Util.executeCellProcessors(Util.java:93)
at org.supercsv.io.AbstractCsvReader.executeProcessors(AbstractCsvReader.java:203)
at org.supercsv.io.CsvBeanReader.readIntoBean(CsvBeanReader.java:261)
at org.supercsv.io.CsvBeanReader.read(CsvBeanReader.java:190)
at test.supercsv.Reading.readWithCsvBeanReader(Reading.java:35)
at test.supercsv.Reading.main(Reading.java:24)部分码
枚举CellProcessor
private static CellProcessor[] getProcessors() {
final CellProcessor[] processors = new CellProcessor[]{
new UniqueHashCode(), // ID (must be unique)
new NotNull(), // Name
new Optional(), // Role
new NotNull(), // Salary
new ParseEnum(Sexuality.class, true) // enum Sexuality
};
return processors;
}csv文件中的第一个Employee对象
1,Pankaj Kumar,CEO,"5,000USD", BI全码
员工豆
package test.supercsv;
public class Employee {
private String id;
private String name;
private String role;
private String salary;
private Sexuality sexuality;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
public Sexuality getSexuality() {
return sexuality;
}
public void setSexuality(Sexuality sexuality) {
this.sexuality = sexuality;
}
@Override
public String toString() {
return "Employee{" + "id=" + id + ", name=" + name + ", role=" + role + ", salary=" + salary
+ ", sexuality=" + sexuality.name()
+ '}';
}
}[医]性行为
package test.supercsv;
public enum Sexuality {
HETERO, HOMO, BI, TRANSGENDER;
}CSVBeanReader
package test.supercsv;
import java.io.FileReader;
import java.io.IOException;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.ParseEnum;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.constraint.UniqueHashCode;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
public class Reading {
private static final String CSV_FILENAME = "src/resources/employee.csv";
public static void main(String[] args) throws IOException {
readWithCsvBeanReader();
}
private static void readWithCsvBeanReader() throws IOException {
try (ICsvBeanReader beanReader = new CsvBeanReader(new FileReader(CSV_FILENAME), CsvPreference.STANDARD_PREFERENCE)) {
// the header elements are used to map the values to the bean (names must match)
final String[] header = beanReader.getHeader(true);
final CellProcessor[] processors = getProcessors();
Employee employee;
while ((employee = beanReader.read(Employee.class, header, processors)) != null) {
System.out.println(String.format("lineNo=%s, rowNo=%s, employee=%s",
beanReader.getLineNumber(),
beanReader.getRowNumber(),
employee));
}
}
}
private static CellProcessor[] getProcessors() {
final CellProcessor[] processors = new CellProcessor[]{
new UniqueHashCode(), // ID (must be unique)
new NotNull(), // Name
new Optional(), // Role
new NotNull(), // Salary
new ParseEnum(Sexuality.class, true) // enum Sexuality
};
return processors;
}
}CSV-文件内容
ID,Name,Role,Salary,Sexuality
1,Pankaj Kumar,CEO,"5,000USD", BI
2,Lisa,Manager,500USD, Homo
3,David,,1000USD, Hetero发布于 2016-08-15 12:02:00
解决方案
正如Hound Dog所指出的:我的csv文件中的spaces是造成麻烦的原因。只要擦除它们,代码就能工作了!
ID,Name,Role,Salary,Sexuality
1,Pankaj Kumar,CEO,"5,000USD,BI
2,Lisa,Manager,500USD,Homo
3,David,,1000USD,Heterohttps://stackoverflow.com/questions/38947629
复制相似问题