http://rensanning.iteye.com/blog/1552053
Super CSV是一个速度奇快、免费跨平台的 CVS 格式数据的读写库,可以方便的处理对象、Map、列表的读写操作,以及自动化的类型转换和数据检查功能。
http://supercsv.sourceforge.net/
版本:SuperCSV-1.52.jar
1、读CSV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Java代码 InputStreamReader freader = new InputStreamReader(new FileInputStream( new File("csv/test1.csv")), "GB2312"); ICsvBeanReader reader = new CsvBeanReader(freader, CsvPreference.EXCEL_PREFERENCE); //获取头部信息 String[] headers = reader.getCSVHeader(true); //获取数据部分 UserBean bean = null; while ((bean = reader.read(UserBean.class, headers, UserBean.readProcessors)) != null) { System.out.print(bean.getName() + "\t"); System.out.print(bean.getAge() + "\t"); System.out.print(bean.getBirthday() + "\t"); System.out.println(bean.getAddress()); } |
2、写CSV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Java代码 OutputStreamWriter fwriter = new OutputStreamWriter( new FileOutputStream(new File("csv/test2.csv")), "GB2312"); SimpleDateFormat format = new SimpleDateFormat("yyyy/M/d"); ICsvBeanWriter writer = new CsvBeanWriter(fwriter, CsvPreference.EXCEL_PREFERENCE); //做3条数据 UserBean bean1 = new UserBean(); bean1.setName("赵,四"); //特殊字符:逗号 bean1.setAge(26); bean1.setBirthday(format.parse("1984/10/30")); bean1.setAddress("辽宁"); UserBean bean2 = new UserBean(); bean2.setName("刘\n能"); //特殊字符:换行 bean2.setAge(24); bean2.setBirthday(format.parse("1986/5/13")); bean2.setAddress("吉林"); UserBean bean3 = new UserBean(); bean3.setName("谢\"广坤"); //特殊字符:双引号 bean3.setAge(22); bean3.setBirthday(format.parse("1988/10/8")); bean3.setAddress("黑龙江"); //输出头部 String headers[] = { "name", "age", "birthday", "address" }; writer.writeHeader(headers); //按顺序输出数据 writer.write(bean1, headers, UserBean.writeProcessors); writer.write(bean2, headers, UserBean.writeProcessors); writer.write(bean3, headers, UserBean.writeProcessors); writer.close(); |
3、自定义CellProcessor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Java代码 InputStreamReader freader = new InputStreamReader(new FileInputStream( new File("csv/test5.csv")), "GB2312"); ICsvBeanReader reader = new CsvBeanReader(freader, CsvPreference.EXCEL_PREFERENCE); //获取头部信息 String[] headers = reader.getCSVHeader(true); CellProcessor[] readProcessors = new CellProcessor[] { new StrMinMax(2, 10), new ParseInt(), new ParseDate("yyyy/M/d"), new CellProcessorAdaptor() { @Override public Object execute(final Object value, final CSVContext context) { String v = (String) value; if (v.length() > 5) { v = v.substring(0,5) + "......"; } return next.execute(v, context); } }}; //获取数据部分 UserBean bean = null; while ((bean = reader.read(UserBean.class, headers, readProcessors)) != null) { System.out.print(bean.getName() + "\t"); System.out.print(bean.getAge() + "\t"); System.out.print(bean.getBirthday() + "\t"); System.out.println(bean.getAddress()); } System.out.println(); reader.close(); |