通过openCSV填充Javabean – 代码说明
我刚开始使用
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应该是什么样子以及应该在strat.setType语句(YourOrder Bean.class)中传递的内容. setColumnMapping方法对我来说也是一样的,但我相信当我知道其余的时候,我可以自己想出一个… 有人会更友好地解释这些代码吗? openCSV文档对我来说非常简短,因为我缺乏一些基本的Java知识(来自PHP,它有很大的不同) 提前致谢! 解决方法
这是定义如何将作为CSV行的String []映射到
JavaBean 的属性.
让我们假设你有一个这样的类: 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; } } 关于这个课程的关键点是: >使用公共noargs构造函数;这是Java中的默认值,因此不需要指定构造函数. 现在;第一个方法setType接受bean的类.它使用它来通过reflection创建实例.在这种情况下,我们将调用: strat.setType(JavaBeanExample.class); 接下来,让我们假设我们有以下格式的CSV
所以我们需要将第一列映射到我们的name属性,第二列映射到orderNumber属性,第三列映射到id.我们使用bean中的属性名称告诉OpenCSV使用哪个setter.然后,OpenCSV使用 在这种情况下,我们会打电话 String[] columns = new String[] {"name","id"}; strat.setColumnMapping(columns); 现在这一切都已经完成,我们可以通过调用来启动OpenCSV List list = csv.parse(strat,yourReader); 这将返回一个List of JavaBeanExample,一个用于文件中的每一行. 但这有点不愉快,因为我们必须在List中转换每个项目.这是因为这个例子有点过时了.这是一个使用generics的例子,这个例子是用Java 7编写的. final ColumnPositionMappingStrategy<JavaBeanExample> strategy = new ColumnPositionMappingStrategy<>(); strategy.setType(JavaBeanExample.class); strategy.setColumnMapping(new String[]{"name","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它的泛型类型.这意味着当我们调用解析List< JavaBeanExample>被退回;即知道其通用类型的列表.现在我们不必在List中转换单个元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |