CSV和凑集对象基于Annotation操纵封装   
               添加时间:2013-5-17 点击量: 
 
                      跟着项目上线,临时处于闲置状况,所以趁闲带着团队对在这一年项目中做的斗劲好的组件,对象和实践总结和抽取出来,在我后续的漫笔中将会陆续公布出来。今上帝如果一个简单的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                 .Csv(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))
                .Csv(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。其他的比拟不消再说了。
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
                     
                  
     
  
 
    
    
跟着项目上线,临时处于闲置状况,所以趁闲带着团队对在这一年项目中做的斗劲好的组件,对象和实践总结和抽取出来,在我后续的漫笔中将会陆续公布出来。今上帝如果一个简单的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 .Csv(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))
.Csv(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。其他的比拟不消再说了。
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永



