`
rensanning
  • 浏览: 3509674 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37404
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:603960
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:677498
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:86981
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399561
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:68981
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90291
社区版块
存档分类
最新评论

Java读写CSV之SuperCSV

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

http://supercsv.sourceforge.net/

版本:SuperCSV-1.52.jar


1、读CSV(CsvBeanReader/CsvListReader/CsvMapReader)
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(CsvBeanWriter/CsvListWriter/CsvMapWriter)
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();


其他的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
https://github.com/uniVocity/csv-parsers-comparison
分享到:
评论
1 楼 idealab 2015-05-15  
之前使用国SuperCSV,后来尝试了另外一个库 uniVocity-parsers, 这个库在性能和可扩展性方面比较强悍,并且提供了很简洁的API,下面是代码实例,可以参考:

public static void main(String[] args) throws FileNotFoundException {
/**
* —————————————
* 将CSV文件读入为2维数组
* —————————————
*/
// 1st, config the CSV reader, such as line separator, column separator and so on
CsvParserSettings settings = new CsvParserSettings();
settings.getFormat().setLineSeparator(“\n”);

// 2nd, creates a CSV parser with the configs
CsvParser parser = new CsvParser(settings);

// 3rd, parses all rows from the CSV file into a 2-dimensional array
List resolvedData = parser.parseAll(new FileReader(“/examples/example.csv”));

/**
* ———————————————
* 将CSV文件读入为自定义JavaBean列表
* ———————————————
*/
// 1st, config the CSV reader with row processor attaching the bean definition
BeanListProcessor rowProcessor = new BeanListProcessor(ColumnBean.class);
settings.setRowProcessor(rowProcessor);
settings.setHeaderExtractionEnabled(true);

// 2nd, parse all rows from the CSF file into the list of beans you defined
parser.parse(new FileReader(“/examples/example.csv”));
List resolvedBeans = rowProcessor.getBeans();
}

相关推荐

Global site tag (gtag.js) - Google Analytics