服务器之家

服务器之家 > 正文

Java生成CSV文件实例详解

时间:2019-11-25 14:19     来源/作者:shichen2014

本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下:

1、新建CSVUtils.java文件:

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

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

  1. String name = "银行退款数据"
  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.  LinkedHashMap map = new LinkedHashMap(); 
  15.  map.put("1""订单号"); 
  16.  map.put("2""支付日期"); 
  17.  map.put("3""退货现金金额(整数金额 单位:分)"); 
  18.  map.put("4""退货原因"); 
  19.  File file = CSVUtils.createCSVFile(exportData, map, filePath, name);//生成CSV文件 
  20.  fileName = file.getName(); 
  21.  CSVUtils.exportFile(response, filePath + fileName, fileName);//下载生成的CSV文件 
标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
运维必须知道的关于云服务器的十个问题
运维必须知道的关于云服务器的十个问题 2019-05-24
返回顶部