importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;importcom.google.gson.Gson;public classCsvTest2 {public static voidmain(String[] args) {
List list = new ArrayList();
HashMap map = new LinkedHashMap();//按照key的添加顺序生成列
map.put("guid", 1);
map.put("name", "xiaoming");
map.put("num", "\t"+"2018000367807013");//\t防止第16位数字置为0
map.put("createtime", newDate());
list.add(map);
OutSqlCsv(list,"e:\\test.csv");
}/***
*@paramlist 数据集合
*@paramoutPutPath 生成文件路径*/
public static void OutSqlCsv(Listlist,String outPutPath) {
Gson gson= newGson();//给csv文件添加标题
List exportData = new ArrayList();//数据主体
List> datalist = new ArrayList>();for(int i=0;i
List data = new ArrayList();
Object list_obj=list.get(i);
Map map_list_obj = gson.fromJson(gson.toJson(list_obj), Map.class);for(Object key2:map_list_obj.keySet()) {if(i==0) {
exportData.add(key2);
}
data.add(map_list_obj.get(key2));
}
datalist.add(data);
}
createCSVFile(exportData, datalist, outPutPath);
}/*** 生成CSV文件的主体方法
*@paramhead
*@paramdataList
*@paramoutPutPath
*@paramfilename
*@return
*/
public static File createCSVFile(List head, List>dataList, String outPutPath) {
File csvFile= null;
BufferedWriter csvWtriter= null;try{
csvFile= newFile(outPutPath);
File parent=csvFile.getParentFile();if (parent != null && !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile();//GB2312使正确读取分隔符","
csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024);//写入文件头部
writeRow(head, csvWtriter);//写入文件内容
for (Listrow : dataList) {
writeRow(row, csvWtriter);
}
csvWtriter.flush();
}catch(Exception e) {
e.printStackTrace();
}finally{try{if(csvWtriter!=null) {
csvWtriter.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}returncsvFile;
}private static void writeRow(List row, BufferedWriter csvWriter) throwsIOException {//写入文件头部
for(Object data : row) {
StringBuffer sb= newStringBuffer();
String rowStr= sb.append("\"").append(data).append("\",").toString();
csvWriter.write(rowStr);
}
csvWriter.newLine();
}
}