opencsv4.0 读写

个人最推荐方式:使用注解



     List<Visitors> beans = new CsvToBeanBuilder(FileReader("yourfile.csv"))
       .withType(Visitors.class).build().parse();


如:Visitors   

 

@CsvBindByName(column = "Id", required = true)  //是否可以为null 否
private int Id;

 
@CsvBindByName(column = "姓名", required = false) //是否可用为null  是
private String userName;


@CsvBindByName(column = "date", required = false)
@CsvDate("yyyy-MM-dd HH:mm:ss")         //自动转换日期格式
private Date  date;



  优势:

   自动完成转换

                   支持但不限于 String int double  date 等类型







 openCSV是一款简单的用于解析CSV文件的java类库,它封装了CSV格式文件的读写操作,可将文件与java对象进行自动映射,自定义分隔符,使用转义符等。

在使用时有几点需要注意下:

        1、       生成的csv文件用EXCEL打开时,总是产生乱码,但是用NOTEPAD++打开时,显示正常。这是因为导出的文件是UTF-8不含BOM格式编码的,为了要让EXCEL正确的显示,需要手动的给将要输出的内容加上BOM标识。

        2、       可通过@ CsvBindByName和@ CsvBindByPosition来CSV文件字段与对象属性进行映射。@ CsvBindByName是根据表头的名称来映射;@CsvBindByPosition是根据文件中字段的位置来映射。当2个注解一起使用时则基于位置的方式有效。因此如果写文件时即想指定顺序又想加表头的话需手动写表头。

        3、       在读CSV文件时需要注意BOM字符,因为在写文件时为了能在Excel里打开增加了UTF-8 BOM标识,读文件时第一列会读不出来。这种情况的解决方法是使用apache commons io提供的BOMInputStream。


        代码示例如下

[java]  view plain  copy
  1. public class Person {  
  2.   
  3.     private String name;  
  4.   
  5.     private int age;  
  6.   
  7.     private int sex;  
  8.   
  9.     private String phone;  
  10.   
  11.     private String address;  
  12.   
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.   
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20.   
  21.     public int getAge() {  
  22.         return age;  
  23.     }  
  24.   
  25.     public void setAge(int age) {  
  26.         this.age = age;  
  27.     }  
  28.   
  29.     public int getSex() {  
  30.         return sex;  
  31.     }  
  32.   
  33.     public void setSex(int sex) {  
  34.         this.sex = sex;  
  35.     }  
  36.   
  37.     public String getPhone() {  
  38.         return phone;  
  39.     }  
  40.   
  41.     public void setPhone(String phone) {  
  42.         this.phone = phone;  
  43.     }  
  44.   
  45.     public String getAddress() {  
  46.         return address;  
  47.     }  
  48.   
  49.     public void setAddress(String address) {  
  50.         this.address = address;  
  51.     }  
  52.   
  53.     public String toString() {  
  54.         return ":"+name + ";" + age + ";" + sex + ";" + phone + ";" + address;  
  55.     }  
  56. }  

[java]  view plain  copy
  1. public class WriteCSV {  
  2.   
  3.     public void writeCSV2(List<Person> dataList, String finalPath) {  
  4.         try {  
  5.             Writer writer = new FileWriter(finalPath);  
  6.             // 手动加上BOM标识  
  7.             writer.write(new String(new byte[] { (byte0xEF, (byte0xBB, (byte0xBF }));  
  8.   
  9.             // 设置显示的顺序  
  10.             String[] columnMapping = { "name""age""sex""phone""address" };  
  11.             ColumnPositionMappingStrategy<Person> mapper =   
  12.                     new ColumnPositionMappingStrategy<Person>();  
  13.             mapper.setType(Person.class);  
  14.             mapper.setColumnMapping(columnMapping);  
  15.   
  16.             // 写表头  
  17.             CSVWriter csvWriter = new CSVWriter(writer, CSVWriter.DEFAULT_SEPARATOR,  
  18.                     CSVWriter.NO_QUOTE_CHARACTER);  
  19.             String[] header = { "姓名""年龄""性别""手机""住址" };  
  20.             csvWriter.writeNext(header);  
  21.   
  22.             StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)  
  23.                     .withMappingStrategy(mapper)  
  24.                     .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)  
  25.                     .withSeparator(CSVWriter.DEFAULT_SEPARATOR)  
  26.                     .withEscapechar('\\').build();  
  27.             beanToCsv.write(dataList);  
  28.             csvWriter.close();  
  29.             writer.close();  
  30.         } catch (IOException e) {  
  31.             e.printStackTrace();  
  32.         } catch (CsvDataTypeMismatchException e) {  
  33.             e.printStackTrace();  
  34.         } catch (CsvRequiredFieldEmptyException e) {  
  35.             e.printStackTrace();  
  36.         }  
  37.         System.out.println(finalPath + "数据导出成功");  
  38.     }  
  39.   
  40.     public void readCSV2(String finalPath) {  
  41.         try {  
  42.             // 使用BOMInputStream自动去除UTF-8中的BOM  
  43.             Reader reader = new InputStreamReader(new BOMInputStream(  
  44.                     new FileInputStream(finalPath)), "utf-8");  
  45.             CSVReader csvReader = new CSVReader(reader, CSVWriter.DEFAULT_SEPARATOR,  
  46.                     CSVWriter.NO_QUOTE_CHARACTER);  
  47.   
  48.             // 列名的映射  
  49.             HeaderColumnNameTranslateMappingStrategy<Person> strategy =   
  50.                     new HeaderColumnNameTranslateMappingStrategy<Person>();  
  51.             strategy.setType(Person.class);  
  52.             Map<String, String> columnMapping = new HashMap<String, String>();  
  53.             columnMapping.put("姓名""name");  
  54.             columnMapping.put("年龄""age");  
  55.             columnMapping.put("性别""sex");  
  56.             columnMapping.put("手机""phone");  
  57.             columnMapping.put("住址""address");  
  58.             strategy.setColumnMapping(columnMapping);  
  59.   
  60.             CsvToBean<Person> csvToBean = new CsvToBean<Person>();  
  61.   
  62.             List<Person> list = csvToBean.parse(strategy, csvReader);  
  63.   
  64.             for (Person p : list) {  
  65.                 System.out.println(p.toString());  
  66.             }  
  67.             csvReader.close();  
  68.             reader.close();  
  69.         } catch (FileNotFoundException e) {  
  70.             e.printStackTrace();  
  71.         } catch (IOException e) {  
  72.             e.printStackTrace();  
  73.         }  
  74.     }  
  75.   
  76.     public static void main(String[] args) {  
  77.         List<Person> dataList = new ArrayList<Person>();  
  78.         Person person1 = new Person();  
  79.         person1.setName("張三");  
  80.         person1.setSex(1);  
  81.         person1.setAge(55);  
  82.         person1.setPhone("13911111111");  
  83.         person1.setAddress("北京海淀区");  
  84.         dataList.add(person1);  
  85.         Person person2 = new Person();  
  86.         person2.setName("小美");  
  87.         person2.setSex(0);  
  88.         person2.setAge(20);  
  89.         person2.setPhone("13911112222");  
  90.         person2.setAddress("北京西城区");  
  91.         dataList.add(person2);  
  92.         Person person3 = new Person();  
  93.         person3.setName("小明");  
  94.         person3.setSex(1);  
  95.         person3.setAge(25);  
  96.         person3.setPhone("13933333333");  
  97.         person3.setAddress("北京海淀区");  
  98.         dataList.add(person3);  
  99.   
  100.         WriteCSV writer = new WriteCSV();  
  101.         String finalPath2 = "D:/bbb.csv";  
  102.         writer.writeCSV2(dataList, finalPath2);  
  103.         writer.readCSV2(finalPath2);  
  104.     }  
  105. }  

猜你喜欢

转载自blog.csdn.net/hellolovelife/article/details/78521705