Java生成CSV文件

时间:2021-10-23 12:01:50

1、新建CSVUtils.Java文件:

http://blog.csdn.net/xuxu198899223/article/details/38079885 

[java] view plain copy print?
  1. package com.saicfc.pmpf.internal.manage.utils;  
  2.   
  3. import java.io.BufferedWriter;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileNotFoundException;  
  7. import java.io.FileOutputStream;  
  8. import java.io.IOException;  
  9. import java.io.InputStream;  
  10. import java.io.OutputStream;  
  11. import java.io.OutputStreamWriter;  
  12. import java.util.ArrayList;  
  13. import java.util.Iterator;  
  14. import java.util.LinkedHashMap;  
  15. import java.util.List;  
  16. import java.util.Map;  
  17.   
  18. import javax.servlet.http.HttpServletResponse;  
  19.   
  20. import org.apache.commons.beanutils.BeanUtils;  
  21.   
  22. /** 
  23.  * 文件操作 
  24.  * @author lizhiyong 
  25.  * @version $Id: CSVUtils.java, v 0.1 
  26.         2014年7月22日 下午2:19:59 Exp $ 
  27.  */  
  28. public class CSVUtils {  
  29.   
  30.     /** 
  31.      * 生成为CVS文件  
  32.      * @param exportData 
  33.      *              源数据List 
  34.      * @param map 
  35.      *              csv文件的列表头map 
  36.      * @param outPutPath 
  37.      *              文件路径 
  38.      * @param fileName 
  39.      *              文件名称 
  40.      * @return 
  41.      */  
  42.     @SuppressWarnings("rawtypes")  
  43.     public static File createCSVFile(List exportData, LinkedHashMap map, String outPutPath,  
  44.                                      String fileName) {  
  45.         File csvFile = null;  
  46.         BufferedWriter csvFileOutputStream = null;  
  47.         try {  
  48.             File file = new File(outPutPath);  
  49.             if (!file.exists()) {  
  50.                 file.mkdir();  
  51.             }  
  52.             //定义文件名格式并创建  
  53.             csvFile = File.createTempFile(fileName, ".csv"new File(outPutPath));  
  54.             System.out.println("csvFile:" + csvFile);  
  55.             // UTF-8使正确读取分隔符","    
  56.             csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(  
  57.                 csvFile), "GBK"), 1024);  
  58.             System.out.println("csvFileOutputStream:" + csvFileOutputStream);  
  59.             // 写入文件头部    
  60.             for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();) {  
  61.                 java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();  
  62.                 csvFileOutputStream.write((String) propertyEntry.getValue() != null ? new String(  
  63.                     ((String) propertyEntry.getValue()).getBytes("GBK"), "GBK") : "");  
  64.                 if (propertyIterator.hasNext()) {  
  65.                     csvFileOutputStream.write(",");  
  66.                 }  
  67.                 System.out.println(new String(((String) propertyEntry.getValue()).getBytes("GBK"),  
  68.                     "GBK"));  
  69.             }  
  70.             csvFileOutputStream.write("\r\n");  
  71.             // 写入文件内容    
  72.             for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {  
  73.                 Object row = (Object) iterator.next();  
  74.                 for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator  
  75.                     .hasNext();) {  
  76.                     java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator  
  77.                         .next();  
  78.                     csvFileOutputStream.write((String) BeanUtils.getProperty(row,  
  79.                         ((String) propertyEntry.getKey()) != null? (String) propertyEntry.getKey()  
  80.                             : ""));  
  81.                     if (propertyIterator.hasNext()) {  
  82.                         csvFileOutputStream.write(",");  
  83.                     }  
  84.                 }  
  85.                 if (iterator.hasNext()) {  
  86.                     csvFileOutputStream.write("\r\n");  
  87.                 }  
  88.             }  
  89.             csvFileOutputStream.flush();  
  90.         } catch (Exception e) {  
  91.             e.printStackTrace();  
  92.         } finally {  
  93.             try {  
  94.                 csvFileOutputStream.close();  
  95.             } catch (IOException e) {  
  96.                 e.printStackTrace();  
  97.             }  
  98.         }  
  99.         return csvFile;  
  100.     }  
  101.   
  102.     /** 
  103.      * 下载文件 
  104.      * @param response 
  105.      * @param csvFilePath 
  106.      *              文件路径 
  107.      * @param fileName 
  108.      *              文件名称 
  109.      * @throws IOException 
  110.      */  
  111.     public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName)  
  112.                                                                                                     throws IOException {  
  113.         response.setContentType("application/csv;charset=GBK");  
  114.         response.setHeader("Content-Disposition",  
  115.             "attachment;  filename=" + new String(fileName.getBytes("GBK"), "ISO8859-1"));  
  116.         //URLEncoder.encode(fileName, "GBK")  
  117.   
  118.         InputStream in = null;  
  119.         try {  
  120.             in = new FileInputStream(csvFilePath);  
  121.             int len = 0;  
  122.             byte[] buffer = new byte[1024];  
  123.             response.setCharacterEncoding("GBK");  
  124.             OutputStream out = response.getOutputStream();  
  125.             while ((len = in.read(buffer)) > 0) {  
  126.                 //out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });  
  127.                 out.write(buffer, 0, len);  
  128.             }  
  129.         } catch (FileNotFoundException e) {  
  130.             System.out.println(e);  
  131.         } finally {  
  132.             if (in != null) {  
  133.                 try {  
  134.                     in.close();  
  135.                 } catch (Exception e) {  
  136.                     throw new RuntimeException(e);  
  137.                 }  
  138.             }  
  139.         }  
  140.     }  
  141.   
  142.     /** 
  143.      * 删除该目录filePath下的所有文件 
  144.      * @param filePath 
  145.      *            文件目录路径 
  146.      */  
  147.     public static void deleteFiles(String filePath) {  
  148.         File file = new File(filePath);  
  149.         if (file.exists()) {  
  150.             File[] files = file.listFiles();  
  151.             for (int i = 0; i < files.length; i++) {  
  152.                 if (files[i].isFile()) {  
  153.                     files[i].delete();  
  154.                 }  
  155.             }  
  156.         }  
  157.     }  
  158.   
  159.     /** 
  160.      * 删除单个文件 
  161.      * @param filePath 
  162.      *         文件目录路径 
  163.      * @param fileName 
  164.      *         文件名称 
  165.      */  
  166.     public static void deleteFile(String filePath, String fileName) {  
  167.         File file = new File(filePath);  
  168.         if (file.exists()) {  
  169.             File[] files = file.listFiles();  
  170.             for (int i = 0; i < files.length; i++) {  
  171.                 if (files[i].isFile()) {  
  172.                     if (files[i].getName().equals(fileName)) {  
  173.                         files[i].delete();  
  174.                         return;  
  175.                     }  
  176.                 }  
  177.             }  
  178.         }  
  179.     }  
  180.   
  181.     /** 
  182.      * 测试数据 
  183.      * @param args 
  184.      */  
  185.     @SuppressWarnings({ "rawtypes""unchecked" })  
  186.     public static void main(String[] args) {  
  187.         List exportData = new ArrayList<Map>();  
  188.         Map row1 = new LinkedHashMap<String, String>();  
  189.         row1.put("1""11");  
  190.         row1.put("2""12");  
  191.         row1.put("3""13");  
  192.         row1.put("4""14");  
  193.         exportData.add(row1);  
  194.         row1 = new LinkedHashMap<String, String>();  
  195.         row1.put("1""21");  
  196.         row1.put("2""22");  
  197.         row1.put("3""23");  
  198.         row1.put("4""24");  
  199.         exportData.add(row1);  
  200.         LinkedHashMap map = new LinkedHashMap();  
  201.         map.put("1""第一列");  
  202.         map.put("2""第二列");  
  203.         map.put("3""第三列");  
  204.         map.put("4""第四列");  
  205.   
  206.         String path = "c:/export/";  
  207.         String fileName = "文件导出";  
  208.         File file = CSVUtils.createCSVFile(exportData, map, path, fileName);  
  209.         String fileName2 = file.getName();  
  210.         System.out.println("文件名称:" + fileName2);  
  211.     }  
  212. }  

2、调用createCSVFile方法生成CSV文件

[java] view plain copy print?
  1. <span style="font-family:Courier New;">String name = "工商银行(ICBC)退款数据";  
  2. List exportData = new ArrayList();  
  3. LinkedHashMap datamMap = null;  
  4. for (Iterator iterator = refundList.iterator(); iterator.hasNext();) {  
  5.       HashMap map = (HashMap) iterator.next();  
  6.       datamMap = new LinkedHashMap();  
  7.       datamMap.put("1", map.get("merOrderId"));  
  8.       datamMap.put("2",DateUtil.convertDateToString("yyyyMMdd", (Date) map.get("orderTime")));  
  9.       BigDecimal amount = (BigDecimal) map.get("amount");  
  10.       String amountString = amount.divide(new BigDecimal(10)).toPlainString();  
  11.       datamMap.put("3", amountString);  
  12.       datamMap.put("4", map.get("remark") != null ? map.get("remark") : "");  
  13.       exportData.add(datamMap);  
  14. }  
  15.  LinkedHashMap map = new LinkedHashMap();  
  16.  map.put("1""订单号");  
  17.  map.put("2""支付日期");  
  18.  map.put("3""退货现金金额(整数金额 单位:分)");  
  19.  map.put("4""退货原因");  
  20.  File file = CSVUtils.createCSVFile(exportData, map, filePath, name);//生成CSV文件  
  21.  fileName = file.getName();  
  22.  CSVUtils.exportFile(response, filePath + fileName, fileName);//下载生成的CSV文件  
  23. </span>