Java读写CSV之SuperCSV

[url]http://rensanning.iteye.com/blog/1552053[/url]

Super CSV是一个速度奇快、免费跨平台的 CVS 格式数据的读写库,可以方便的处理对象、Map、列表的读写操作,以及自动化的类型转换和数据检查功能。

[url]http://supercsv.sourceforge.net/ [/url]

版本:SuperCSV-1.52.jar

1、读CSV
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
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
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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值