OpenCSV 是一个用于读写 CSV 文件的 Java 库。它提供了简单易用的 API 来处理 CSV 文件,包括将 CSV 数据映射到 Java 对象(Bean)。将一行映射到一个 Bean 的功能通常通过 RowMapper
接口实现。
mapRow
方法来定义具体的映射逻辑。假设我们有一个简单的 Person
类:
public class Person {
private String name;
private int age;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
我们可以使用 OpenCSV 将 CSV 行映射到 Person
对象:
import com.opencsv.CSVReader;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.CsvToBeanBuilder;
import java.io.FileReader;
import java.io.IOException;
public class CsvToBeanExample {
public static void main(String[] args) {
try (CSVReader reader = new CSVReader(new FileReader("path/to/your/file.csv"))) {
ColumnPositionMappingStrategy<Person> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(Person.class);
String[] columns = new String[]{"name", "age"};
strategy.setColumnMapping(columns);
CsvToBeanBuilder<Person> builder = new CsvToBeanBuilder<>(reader);
builder.withMappingStrategy(strategy);
for (Person person : builder.build().iterator()) {
System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
原因:CSV 文件中的列名或顺序与 Bean 属性不匹配。
解决方法:
ColumnPositionMappingStrategy
明确指定列的位置。ColumnPositionMappingStrategy<Person> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(Person.class);
String[] columns = new String[]{"name", "age"};
strategy.setColumnMapping(columns);
原因:CSV 文件中的数据类型与 Bean 属性类型不匹配,例如 CSV 中的数字被解析为字符串。
解决方法:
public void setAge(String age) {
this.age = Integer.parseInt(age);
}
原因:CSV 文件的编码与读取时的编码不一致,导致乱码。
解决方法:
FileReader
时指定正确的编码。new FileReader("path/to/your/file.csv", StandardCharsets.UTF_8)
通过以上方法,你可以有效地将 CSV 行映射到 Java Bean,并解决常见的映射问题。
领取专属 10元无门槛券
手把手带您无忧上云