CSV和集合對象基於Annotation操作封裝

        隨着項目上線,暫時處於閒置狀態,所以趁閒帶着團隊對在這一年項目中做的比較好的組件,工具和實踐總結和抽取出來,在我後續的隨筆中將會陸續發佈出來。今天主要是一個簡單的maven小組件,對opencsv基於Annotation簡單的封裝,使得我們可以輕易的將CSV文件轉化爲List對像和把List對像導出爲CSV文件。

     項目託管地址於github https://github.com/greengerong/opencsv-utils

     對於代碼就不用多說了,簡單看看如何使用。

Object


package opencsv.utils;


public class Person {


   private int id;


   @Csv("person name")

   private String name;


   @Ignore

   private int age;


   public Person(int id, String name, int age) {

       this.id = id;

       this.name = name;

       this.age = age;

   }


   public Person() {


   }


   public int getId() {

       return id;

   }


   public void setId(int id) {

       this.id = id;

   }


   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;

   }

}


  Mapping會自動將沒有ignore的字段作爲CSV的映射屬性名作爲CSV列頭,如果針對特殊列則可以標記@CSV解決。

1: 讀取CSV:

(1) 基於Annotation映射方式

   @Test

   public void shouldGetPersonFromCSV() throws Exception {

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

       List<Person> personList = personCsvMapper

               .withMapping("id", "id")

               .withMapping("person name", "name")

               .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"));


   }



(2) 自定義映射方式  

   @Test

   public void shouldToCsv() throws Exception {

       personCsvMapper.withMapping(new CsvColumnMapping(Person.class));

       final ArrayList<Person> list = new ArrayList<Person>();

       list.add(new Person(1, "name1", 20));

       list.add(new Person(2, "name2", 30));

       final StringWriter writer = new StringWriter();


       personCsvMapper.toCsv(writer, list);


       final String text = writer.toString();

       assertThat(text, is("id,person name\n1,name1\n2,name2\n"));

   }

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。其他的相比不用再說了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章