Java生成CSV文件实例详解

生产CSV文件,一般用于对账,记录操作快照等,遇到问题方便查找原因!

Java生成CSV文件的方法,具体实现步骤如下:

在你自己的包下,创建CSVUtils.java文件:


package com.aspire.aplus.util;

import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.io.OutputStreamWriter;  
import java.net.URLEncoder;  
import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.LinkedHashMap;  
import java.util.List;  
import java.util.Map;  
   
import javax.servlet.http.HttpServletResponse;  
   
import org.apache.commons.beanutils.BeanUtils;  
   
/** 
 * 文件操作 
 */  
public class CSVUtils {  
   
  /** 
   * 生成为CVS文件 
   * @param exportData 
   *       源数据List 
   * @param map 
   *       csv文件的列表头map 
   * @param outPutPath 
   *       文件路径 
   * @param fileName 
   *       文件名称 
   * @return 
   */  
  @SuppressWarnings("rawtypes")  
  public static File createCSVFile(List exportData, LinkedHashMap map, String outPutPath,  
                   String fileName) {  
    File csvFile = null;  
    BufferedWriter csvFileOutputStream = null;  
    try {  
      File file = new File(outPutPath);  
      if (!file.exists()) {  
        file.mkdir();  
      }  
      //定义文件名格式并创建  
      csvFile = File.createTempFile(fileName, ".csv", new File(outPutPath));  
      System.out.println("csvFile:" + csvFile);  
      // UTF-8使正确读取分隔符","  
     
//如果生产文件乱码,windows下用gbk,linux用UTF-8
      csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(  
        csvFile), "UTF-8"), 1024);  
      System.out.println("csvFileOutputStream:" + csvFileOutputStream);  
      // 写入文件头部  
      for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();) {  
        java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();  
        csvFileOutputStream.write((String) propertyEntry.getValue() != null ? (String) propertyEntry.getValue() : "" );  
        if (propertyIterator.hasNext()) {  
          csvFileOutputStream.write(",");  
        }  
      }  
      csvFileOutputStream.newLine();  
      // 写入文件内容  
      for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {  
        Object row = (Object) iterator.next();  
        for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator  
          .hasNext();) {  
          java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator  
            .next();  
          csvFileOutputStream.write((String) BeanUtils.getProperty(row,  
            (String) propertyEntry.getKey()));  
          if (propertyIterator.hasNext()) {  
            csvFileOutputStream.write(",");  
          }  
        }  
        if (iterator.hasNext()) {  
          csvFileOutputStream.newLine();  
        }  
      }  
      csvFileOutputStream.flush();  
    } catch (Exception e) {  
      e.printStackTrace();  
    } finally {  
      try {  
        csvFileOutputStream.close();  
      } catch (IOException e) {  
        e.printStackTrace();  
      }  
    }  
    return csvFile;  
  }  
   
  /** 
   * 下载文件 
   * @param response 
   * @param csvFilePath 
   *       文件路径 
   * @param fileName 
   *       文件名称 
   * @throws IOException 
   */  
  public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName)  
                                                  throws IOException {  
    response.setContentType("application/csv;charset=UTF-8");  
    response.setHeader("Content-Disposition",  
      "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));  
   
    InputStream in = null;  
    try {  
      in = new FileInputStream(csvFilePath);  
      int len = 0;  
      byte[] buffer = new byte[1024];  
      response.setCharacterEncoding("UTF-8");  
      OutputStream out = response.getOutputStream();  
      while ((len = in.read(buffer)) > 0) {  
        out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });  
        out.write(buffer, 0, len);  
      }  
    } catch (FileNotFoundException e) {  
      System.out.println(e);  
    } finally {  
      if (in != null) {  
        try {  
          in.close();  
        } catch (Exception e) {  
          throw new RuntimeException(e);  
        }  
      }  
    }  
  }  
   
  /** 
   * 删除该目录filePath下的所有文件 
   * @param filePath 
   *      文件目录路径 
   */  
  public static void deleteFiles(String filePath) {  
    File file = new File(filePath);  
    if (file.exists()) {  
      File[] files = file.listFiles();  
      for (int i = 0; i < files.length; i++) {  
        if (files[i].isFile()) {  
          files[i].delete();  
        }  
      }  
    }  
  }  
   
  /** 
   * 删除单个文件 
   * @param filePath 
   *     文件目录路径 
   * @param fileName 
   *     文件名称 
   */  
  public static void deleteFile(String filePath, String fileName) {  
    File file = new File(filePath);  
    if (file.exists()) {  
      File[] files = file.listFiles();  
      for (int i = 0; i < files.length; i++) {  
        if (files[i].isFile()) {  
          if (files[i].getName().equals(fileName)) {  
            files[i].delete();  
            return;  
          }  
        }  
      }  
    }  
  }  
   
  /** 
   * 测试数据 
   * @param args 
   */  
  @SuppressWarnings({ "rawtypes", "unchecked" })  
  public static void main(String[] args) {  
    List exportData = new ArrayList<Map>();  
    Map row1 = new LinkedHashMap<String, String>();  
    row1.put("1", "11");  
    row1.put("2", "12");  
    row1.put("3", "13");  
    row1.put("4", "14");  
    exportData.add(row1);  
    row1 = new LinkedHashMap<String, String>();  
    row1.put("1", "21");  
    row1.put("2", "22");  
    row1.put("3", "23");  
    row1.put("4", "24");  
    exportData.add(row1);  
    LinkedHashMap map = new LinkedHashMap();  

    //设置列名
    map.put("1", "第一列名称");  

    map.put("2", "第二列名称");  
    map.put("3", "第三列名称");  
    map.put("4", "第四列名称");  
    //这个文件上传到路径,可以配置在数据库从数据库读取,这样方便一些!
    String path = "D:/reateCSVFile/";  

   //文件名=生产的文件名称+时间戳
    String fileName = "文件导出";  

    File file = CSVUtils.createCSVFile(exportData, map, path, fileName);  
    String fileName2 = file.getName();  
    System.out.println("文件名称:" + fileName2);  
  }  
}  

生成文件如下图:


如果你是湖南的 欢迎加入 湖南人在深圳-Java群:557651502

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值