java生成csv文件并通过浏览器下载

本文介绍了如何在Java中生成CSV文件,并通过浏览器进行下载。利用`CsvUtils`类,创建CSV文件,包括文件头部和内容的写入。接着通过`ExportCsvController`类实现下载功能,涉及文件路径处理、Http响应设置、文件读取和流操作。示例中还展示了限制导出数据量不超过100000条的逻辑,以及前端页面导出功能的触发方式。
摘要由CSDN通过智能技术生成

       最近在电信做业务的时候发现有一个导出csv文件的需求,一般导出使用POI直接导出excel即可,excel2007已经支持最多104.8万条记录,基本可以满足需求,为了尝试下导出csv文件,因此采用了导出csv文件的实现,csv即为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),可以使用excel直接打开预览。

       下面结合所使用的功能进行说明:

        首先创建一个CsvUtil.java类,包括删除已生成的csv文件、测试代码,代码如下:

public class CsvUtils {

 private static final org.apache.commons.logging.Log LOG = LogFactory
   .getLog(CsvUtils.class);

 /**
  * 生成为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));
   LOG.debug("csvFile:" + csvFile);
   // UTF-8使正确读取分隔符","
   csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(csvFile), "GBK"), 1024);
   LOG.debug("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.setHeader("Content-type", "application-download");

  FileInputStream in = null;
  OutputStream out = response.getOutp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值