package com.qyb.csv;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.util.List;
public class CsvUtil {
private static CsvUtil csvUtil;
public static CsvUtil getInstance(){
if(csvUtil==null){
csvUtil=new CsvUtil();
}
return csvUtil;
}
/**
*
* 导出生成csv格式的文件
* @author qyb
* @param titles csv格式头文
* @param propertys 需要导出的数据实体的属性,注意与title一一对应
* @param list 需要导出的对象集合
* @return
* @throws IOException
* Created 2017年1月5日 上午10:51:44
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static <T> String exportCsv(String[] titles,String[] propertys,List<T> list) throws IOException, IllegalArgumentException, IllegalAccessException{
File file = new File("E:\\test.csv");
//构建输出流,同时指定编码
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
//csv文件是逗号分隔,除第一个外,每次写入一个单元格数据后需要输入逗号
for(String title : titles){
ow.write(title);
ow.write(",");
}
//写完文件头后换行
ow.write("\r\n");
//写内容
for(Object obj : list){
//利用反射获取所有字段
Field[] fields = obj.getClass().getDeclaredFields();
for(String property : propertys){
for(Field field : fields){
//设置字段可见性
field.setAccessible(true);
if(property.equals(field.getName())){
ow.write(field.get(obj).toString());
ow.write(",");
continue;
}
}
}
//写完一行换行
ow.write("\r\n");
}
ow.flush();
ow.close();
return "0";
}
}
package com.qyb.csv;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Export {
@SuppressWarnings("static-access")
public void test() {
String[] titles = new String[]{"ID","姓名"};
String[] propertys = new String[]{"id","name"};
List<User> list = new ArrayList<User>();
User user;
user = new User();
user.setId(1L);
user.setName("张三");
list.add(user);
user = new User();
user.setId(2L);
user.setName("李四");
list.add(user);
try {
CsvUtil.getInstance().exportCsv(titles,propertys, list);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new Export().test();
}
}