我刚开始使用 Java 并且缺少很多知识,但是我需要编写一个简单的类,该类将使用 openCSV 将 csv 文件转换为 JavaBean。我在这里找到了一些类似问题的答案,但没有人能够帮助我。到目前为止,已经遇到了这段代码:
ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(YourOrderBean.class);
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean
strat.setColumnMapping(columns);
CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, yourReader);
它位于 openCSV 常见问题解答站点以及此处的另一个问题中。问题是我找不到对象 ColumnPositionMappingStrategy 应该是什么样子的规范,以及应该在 str.setType 语句(YourOrder Bean.class)中传递什么。 setColumnMapping 方法对我来说也很陌生,但我相信当我知道其余的时候我可以自己解决这个问题......
有没有人愿意更多地解释一下这段代码? openCSV 文档对我来说非常简短,因为我缺乏一些 Java 的基本知识(来自 PHP,它有很大的不同)
提前致谢!
最佳答案
这定义了如何将作为 CSV 行的 String[]
映射到 JavaBean
的属性。
让我们假设你有一个像这样的 class
:
public class JavaBeanExample {
private Integer id;
private String name;
private Integer orderNumber;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(Integer orderNumber) {
this.orderNumber = orderNumber;
}
}
关于这个类需要注意的关键点是:
getXxxx
的方法。 setXxxx
的方法。 现在;第一个方法
setType
获取 bean 的类。它使用它通过 reflection 创建实例。在这种情况下,我们会调用:strat.setType(JavaBeanExample.class);
接下来,让我们假设我们有以下格式的 CSV
所以我们需要将第一列映射到我们的
name
属性,第二列映射到我们的 orderNumber
属性,第三列映射到 id
。我们使用 bean 中的属性名称来告诉 OpenCSV 使用哪个 setter。 OpenCSV 然后使用 PropertyDescriptor
通过相应命名的 setter 设置属性。在这种情况下,我们会调用
String[] columns = new String[] {"name", "orderNumber", "id"};
strat.setColumnMapping(columns);
现在这一切都设置好了,我们可以通过调用来启动 OpenCSV
List list = csv.parse(strat, yourReader);
这将返回
List
的 JavaBeanExample
,文件中的每一行一个。但这有点令人不快,因为我们必须转换
List
中的每一项。这是因为该示例有些过时。这是一个使用 generics 的例子,这个例子是用 Java 7 编写的。final ColumnPositionMappingStrategy<JavaBeanExample> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(JavaBeanExample.class);
strategy.setColumnMapping(new String[]{"name", "orderNumber", "id"});
final CsvToBean<JavaBeanExample> csvToBean = new CsvToBean<>();
final List<JavaBeanExample> beanExamples;
try (final Reader reader = new FileReader("myFile.csv")) {
beanExamples = csvToBean.parse(strategy, reader);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
这里的区别在于我们使用尖括号告诉
ColumnPositionMappingStrategy
它的泛型类型。我们还告诉 CsvToBean
它的泛型类型。这意味着当我们调用 parse 时会返回一个 List<JavaBeanExample>
;即 List
知道其泛型类型。现在我们不必在 List
中转换单个元素。关于java - 通过 openCSV 填充 Javabean - 代码解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17259926/