Java读写CSV之SuperCSV

字体大小: 中小 标准 ->行高大小: 标准
Super CSV是一个速度奇快、免费跨平台的 CSV 格式数据的读写库,可以方便的处理对象、Map、列表的读写操作,以及自动化的类型转换和数据检查功能。 

http://supercsv.sourceforge.net/ 

版本:SuperCSV-1.52.jar
 

1、读CSV 
Java代码  
  1. InputStreamReader freader = new InputStreamReader(new FileInputStream(  
  2.         new File("csv/test1.csv")), "GB2312");  
  3.   
  4. ICsvBeanReader reader = new CsvBeanReader(freader,  
  5.         CsvPreference.EXCEL_PREFERENCE);  
  6.   
  7. //获取头部信息  
  8. String[] headers = reader.getCSVHeader(true);  
  9.   
  10. //获取数据部分  
  11. UserBean bean = null;  
  12. while ((bean = reader.read(UserBean.class, headers, UserBean.readProcessors)) != null) {  
  13.     System.out.print(bean.getName() + "\t");  
  14.     System.out.print(bean.getAge() + "\t");  
  15.     System.out.print(bean.getBirthday() + "\t");  
  16.     System.out.println(bean.getAddress());  
  17. }  


2、写CSV 
Java代码  
  1. OutputStreamWriter fwriter = new OutputStreamWriter(  
  2.         new FileOutputStream(new File("csv/test2.csv")), "GB2312");  
  3.   
  4. SimpleDateFormat format = new SimpleDateFormat("yyyy/M/d");  
  5.   
  6. ICsvBeanWriter writer = new CsvBeanWriter(fwriter,  
  7.         CsvPreference.EXCEL_PREFERENCE);  
  8.   
  9. //做3条数据  
  10. UserBean bean1 = new UserBean();  
  11. bean1.setName("赵,四");       //特殊字符:逗号  
  12. bean1.setAge(26);  
  13. bean1.setBirthday(format.parse("1984/10/30"));  
  14. bean1.setAddress("辽宁");  
  15.   
  16. UserBean bean2 = new UserBean();  
  17. bean2.setName("刘\n能");      //特殊字符:换行  
  18. bean2.setAge(24);  
  19. bean2.setBirthday(format.parse("1986/5/13"));  
  20. bean2.setAddress("吉林");  
  21.   
  22. UserBean bean3 = new UserBean();  
  23. bean3.setName("谢\"广坤"); //特殊字符:双引号  
  24. bean3.setAge(22);  
  25. bean3.setBirthday(format.parse("1988/10/8"));  
  26. bean3.setAddress("黑龙江");  
  27.   
  28. //输出头部  
  29. String headers[] = { "name""age""birthday""address" };          
  30. writer.writeHeader(headers);  
  31.   
  32. //按顺序输出数据  
  33. writer.write(bean1, headers, UserBean.writeProcessors);  
  34. writer.write(bean2, headers, UserBean.writeProcessors);  
  35. writer.write(bean3, headers, UserBean.writeProcessors);  
  36.   
  37. writer.close();  


3、自定义CellProcessor 
Java代码  
  1. InputStreamReader freader = new InputStreamReader(new FileInputStream(  
  2.         new File("csv/test5.csv")), "GB2312");  
  3.   
  4. ICsvBeanReader reader = new CsvBeanReader(freader,  
  5.         CsvPreference.EXCEL_PREFERENCE);  
  6.   
  7. //获取头部信息  
  8. String[] headers = reader.getCSVHeader(true);  
  9.   
  10. CellProcessor[] readProcessors = new CellProcessor[] {  
  11.         new StrMinMax(210),  
  12.         new ParseInt(),  
  13.         new ParseDate("yyyy/M/d"),  
  14.         new CellProcessorAdaptor() {  
  15.             @Override  
  16.             public Object execute(final Object value, final CSVContext context) {  
  17.                 String v = (String) value;  
  18.                 if (v.length() > 5) {  
  19.                     v = v.substring(0,5) + "......";  
  20.                 }  
  21.                 return next.execute(v, context);  
  22.             }  
  23.         }};  
  24.   
  25. //获取数据部分  
  26. UserBean bean = null;  
  27. while ((bean = reader.read(UserBean.class, headers, readProcessors)) != null) {  
  28.     System.out.print(bean.getName() + "\t");  
  29.     System.out.print(bean.getAge() + "\t");  
  30.     System.out.print(bean.getBirthday() + "\t");  
  31.     System.out.println(bean.getAddress());  
  32. }  
  33. System.out.println();  
  34.   
  35. reader.close();  


其他的CSV解析器还有: 
Commons CSV:http://commons.apache.org/proper/commons-csv/ 
OpenCSV:http://opencsv.sourceforge.net/ 
OrangeSignal CSV:http://orangesignal.github.io/orangesignal-csv/ 

CSV Library Features Matrix 
http://orangesignal.github.io/orangesignal-csv/csv_library_feature_matrix.html

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68315.html