CSV和集合对象基于Annotation操作封装

        随着项目上线,暂时处于闲置状态,所以趁闲带着团队对在这一年项目中做的比较好的组件,工具和实践总结和抽取出来,在我后续的随笔中将会陆续发布出来。今天主要是一个简单的maven小组件,对opencsv基于Annotation简单的封装,使得我们可以轻易的将CSV文件转化为List对像和把List对像导出为CSV文件。

      项目托管地址于github https://github.com/greengerong/opencsv-utils

      对于代码就不用多说了,简单看看如何使用。

Object

 

 1 package opencsv.utils;
 2
 3
 4
 5 public class Person {
 6
 7
 8
 9     private int id;
10
11
12
13     @Csv("person name")
14
15     private String name;
16
17
18
19     @Ignore
20
21     private int age;
22
23
24
25     public Person(int id, String name, int age) {
26
27         this.id = id;
28
29         this.name = name;
30
31         this.age = age;
32
33     }
34
35
36
37     public Person() {
38
39
40
41     }
42
43
44
45     public int getId() {
46
47         return id;
48
49     }
50
51
52
53     public void setId(int id) {
54
55         this.id = id;
56
57     }
58
59
60
61     public String getName() {
62
63         return name;
64
65     }
66
67
68
69     public void setName(String name) {
70
71         this.name = name;
72
73     }
74
75
76
77     public int getAge() {
78
79         return age;
80
81     }
82
83
84
85     public void setAge(int age) {
86
87         this.age = age;
88
89     }
90
91 }
92
93  

 

Mapping会自动将没有ignore的字段作为CSV的映射属性名作为CSV列头,如果针对特殊列则可以标记@CSV解决。

1: 读取CSV:

(1) 基于Annotation映射方式

 1 @Test
 2
 3     public void shouldGetPersonFromCSV() throws Exception {
 4
 5         StringReader reader = new StringReader("id,person name\n1,name1\n2,name2\n");
 6
 7         List<Person> personList = personCsvMapper
 8
 9                 .withMapping("id", "id")
10
11                 .withMapping("person name", "name")
12
13                 .fromCsv(reader);
14
15
16
17         assertThat(personList.size(), is(2));
18
19
20
21         final Person first = personList.get(0);
22
23         assertThat(first.getId(), is(1));
24
25         assertThat(first.getName(), is("name1"));
26
27
28
29         final Person second = personList.get(1);
30
31         assertThat(second.getId(), is(2));
32
33         assertThat(second.getName(), is("name2"));
34
35
36
37     }
38
39  

 

(2) 自定义映射方式 

    

 1 @Test
 2
 3     public void shouldToCsv() throws Exception {
 4
 5         personCsvMapper.withMapping(new CsvColumnMapping(Person.class));
 6
 7         final ArrayList<Person> list = new ArrayList<Person>();
 8
 9         list.add(new Person(1, "name1", 20));
10
11         list.add(new Person(2, "name2", 30));
12
13         final StringWriter writer = new StringWriter();
14
15
16
17         personCsvMapper.toCsv(writer, list);
18
19
20
21         final String text = writer.toString();
22
23         assertThat(text, is("id,person name\n1,name1\n2,name2\n"));
24
25     }

 

2: CSV输出

 

 @Test

    public void shouldGetPersonFromCsv() throws Exception {

        StringReader reader = new StringReader("id,person name\n1,name1\n2,name2\n");

        List<Person> personList = new CsvMapper<Person>(Person.class)

                .withMapping(new CsvColumnMapping(Person.class))

                .fromCsv(reader);

        assertThat(personList.size(), is(2));

        final Person first = personList.get(0);

        assertThat(first.getId(), is(1));

        assertThat(first.getName(), is("name1"));

        final Person second = personList.get(1);

        assertThat(second.getId(), is(2));

        assertThat(second.getName(), is("name2"));

    }

 

 

最后在累赘下托管地址:https://github.com/greengerong/opencsv-utils。其他的相比不用再说了。

作者:破  狼 
出处:http://www.cnblogs.com/whitewolf/ 
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客博客园--破狼51CTO--破狼。http://www.cnblogs.com/whitewolf/archive/2013/05/16/3082700.html

时间: 2024-11-01 14:25:54

CSV和集合对象基于Annotation操作封装的相关文章

Javascript基于对象三大特性(封装性、继承性、多态性)_javascript技巧

Javascript基于对象的三大特征和C++,Java面向对象的三大特征一样,都是封装(encapsulation).继承(inheritance )和多态(polymorphism ).只不过实现的方式不同,其基本概念是差不多的.其实除三大特征之外,还有一个常见的特征叫做抽象(abstract),这也就是我们在一些书上有时候会看到面向对象四大特征的原因了.一.封装性    封装就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能

简单实现JS对dom操作封装_javascript技巧

这篇文章主要介绍了JS简单实现对dom操作封装,下面就直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

C# 3.0新特征之创建和初始化集合对象

创建|对象|集合 一. 引言 C# 3.0中新的对象初始化器是一种简单的语法特征-借助于这种特征,对象的构建和初始化变得非常简单.假定你有一个类Student,它看起来有如下样子: public class Student{ public string firstName; public string lastName;} 那么,你可以使用对象初始化器来创建这个类的一个对象,如下所示: var student1 = new Student{firstName = "Bruce", la

将数据库操作封装到Javabean

封装|数据|数据库 封装数据库操作,目的就是为了隐藏java.sql包内的类,在编码中去掉核心的数据库操作代码.以杜绝直接数据库操作容易带来的资源未释放问题.同时也减少了数据库操作的编码量. 但是很多网友在封装时,却喜欢返回结果集(ResultSet对象),那么这个封装就没有意义了.1. 又是直接操作核心数据库类,跟封装前几乎没什么变化.2. 结果集总是依赖于它使用的连接(Connection)对象.因此当连接对象在方法内被关闭后,你返回的ResultSet就没有用了. 如果真的要获得查询数据库

Spring3.2中Bean定义之基于Annotation和Java Code配置方式的源码解析

基于 Annotation 配置 Bean Definition 的源码解读 本系列文章第一部分分析了 Spring 解析 XML 配置文件中 <bean /> 元素的源码,这是 Spring 最原始的一种配置方式,同时也使 XML 中的节点具有命名空间特性.参考 Spring 相关文档,如果有如下的配置方式: <context:component-scan base-package="com.colorcc.spring.sample" /> 则可知:其一,该

基于Annotation拦截的Spring AOP权限验证方法

在 Web 开发过程中,一个非常理想的开发过程是,开发人员在开发中并不需要关心权限问题,不需要在 Java 方法中写 很多逻辑判断去判断用户是否具有合适的角色和权限,这样开发会花费非常多的人力成本,因为所有的开发人员都需要了解 关于权限的详细内容,也非常不容易进行后期维护.我们希望有专门的很少数量的开发人员了解权限内容,并且可以随时方 便的修改和配置.于是,我们使用 Annotation,在 Java 方法之前使用 Annotation 可以非常方便的添加,修改和删除对 于权限的管理功能. 本文

C#编程利器之五:集合对象(Collections)

记得教科书上有这样一句话:"如果需要使用同一类型的多个对象,就可以使用集合和数组." ,是的, 没有错.只是数组的大小是固定的.如果元素个数是动态的,就应使用集合类.在.NET Framework里,集 合有很多,如List<T>和ArrayList是与数组相当的集合类.还有其他类型的集合:队列.栈.链表 和字典.本文不会对这些集合对象作详细的介绍,只是把常用的集合对象拿出来讨论一下. 一.数组 在实际应用中,数组又可分为:简单数组.多维数组.锯齿数组.Array数组.使用

Objective-C之集合对象的内存管理

集合对象的内存管理 本小节知识点: [掌握]集合对象的内存管理 [理解]集合对象内存管理总结 1.集合对象的内存管理 当一个对象加入到集合中,那么该对象的引用计数会+1 当集合被销毁的时候,集合会向集合中的元素发送release消息 NSMutableArray *arr = [[NSMutableArray alloc] init]; Person *p = [[Person alloc] init]; NSLog(@"retainCount = %lu", [p retainCou

php函数、类和对象以及类的封装、继承、类的静态方法、静态属性

原文:php函数.类和对象以及类的封装.继承.类的静态方法.静态属性 1.函数     php内置函数可以直接使用,如果没有安装php扩展即可     自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数值 echo '<pre/>'; var_dump($var); } 2.类(class)和对象( new Obj) <?php //定义一个人的类,现在还不是对象 class Person { //私有属性 privat