java导出csv格式文件的方法

本文实例为大家分享了java导出csv格式文件的具体代码,供大家参考,具体内容如下

导出csv格式文件的本质是导出以逗号为分隔的文本数据

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 com.alibaba.druid.util.StringUtils;

/**
 * 文件操作
 */
public class CSVUtils { 

 /**
 * 功能说明:获取UTF-8编码文本文件开头的BOM签名。
 * BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。例:接收者收到以EF BB BF开头的字节流,就知道是UTF-8编码。
 * @return UTF-8编码文本文件开头的BOM签名
 */
 public static String getBOM() {

   byte b[] = {(byte)0xEF, (byte)0xBB, (byte)0xBF};
   return new String(b);
 }

 /**
 * 生成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.mkdirs();
  }
  //定义文件名格式并创建
  csvFile =new File(outPutPath+fileName+".csv");
  file.createNewFile();
  // UTF-8使正确读取分隔符","
  //如果生产文件乱码,windows下用gbk,linux用UTF-8
  csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
  csvFile), "UTF-8"), 1024); 

  //写入前段字节流,防止乱码
  csvFileOutputStream.write(getBOM());
  // 写入文件头部
  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();
   String str=row!=null?((String)((Map)row).get( propertyEntry.getKey())):"";

   if(StringUtils.isEmpty(str)){
    str="";
   }else{
    str=str.replaceAll("\"","\"\"");
    if(str.indexOf(",")>=0){
     str="\""+str+"\"";
    }
   }
   csvFileOutputStream.write(str);
   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;
 } 

 /**
 *  生成并下载csv文件
 * @param response
 * @param exportData
 * @param map
 * @param outPutPath
 * @param fileName
 * @throws IOException
 */
 @SuppressWarnings("rawtypes")
 public static void exportDataFile(HttpServletResponse response,List exportData, LinkedHashMap map, String outPutPath,String fileName) throws IOException{
  File csvFile = null;
  BufferedWriter csvFileOutputStream = null;
  try {
   File file = new File(outPutPath);
   if (!file.exists()) {
   file.mkdirs();
   }
   //定义文件名格式并创建
   csvFile =new File(outPutPath+fileName+".csv");
   if(csvFile.exists()){
    csvFile.delete();
   }
   csvFile.createNewFile();
   // UTF-8使正确读取分隔符","
   //如果生产文件乱码,windows下用gbk,linux用UTF-8
   csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "UTF-8"), 1024);
   //写入前段字节流,防止乱码
   csvFileOutputStream.write(getBOM());
   // 写入文件头部
   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();
    String str=row!=null?((String)((Map)row).get( propertyEntry.getKey())):"";
    if(StringUtils.isEmpty(str)){
     str="";
    }else{
     str=str.replaceAll("\"","\"\"");
     if(str.indexOf(",")>=0){
      str="\""+str+"\"";
     }
    }
    csvFileOutputStream.write(str);
    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();
   }
  } 

  InputStream in = null;
  try {
   in = new FileInputStream(outPutPath+fileName+".csv");
   int len = 0;
   byte[] buffer = new byte[1024]; 

   OutputStream out = response.getOutputStream();
   response.reset(); 

   response.setContentType("application/csv;charset=UTF-8");
   response.setHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(fileName+".csv", "UTF-8"));
   response.setCharacterEncoding("UTF-8");
   while ((len = in.read(buffer)) > 0) {
   out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
   out.write(buffer, 0, len);
   }
   out.close();
  } catch (FileNotFoundException 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 = "E:/"; 

 //文件名=生产的文件名称+时间戳
 String fileName = "文件导出";
 File file = CSVUtils.createCSVFile(exportData, map, path, fileName);
 String fileName2 = file.getName();
 System.out.println("文件名称:" + fileName2);
 }
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java生成csv文件乱码的解决方法示例 java导出csv乱码

    复制代码 代码如下: import java.io.File;import java.io.IOException;import java.util.List; import com.google.common.base.Charsets;import com.google.common.base.Joiner;import com.google.common.base.Preconditions;import com.google.common.collect.Lists;import com

  • java导出生成csv文件的方法

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我们一般使用poi操作excel,导入,导出都可以,但是poi很消耗内存,尤其在导出时,这个时候我们其实可以选择导出生成csv文件,因为其跟文本差不多,所以效率很高. 简单写了一个实现类,代码如下: /** * * 导出生成csv格式的文件 * @author ccg * @param titles

  • java实现CSV文件导入与导出功能

    年前在开发功能模块的时候用到了CSV文件导入导出,就此整理一下,便于大家参考. 导入导出功能很多时候用到的都是Excel文件,但是现在越来越多的使用了CSV文件进行此操作,它是一个纯文本文件,可以用记事本打开,也可以用Excel打开.CSV文件不像Excel那样有很多条条框框,它使用硬回车分割每条记录,用逗号分隔每条数据的字段. CSV格式的文件就是用硬回车和文本都好实现的表格,用Excel一读就成了表格.文件名后缀就是 .csv. 直接上代码吧! 导入部分 导入的时候基于Ajax请求,js代码

  • JAVA导出CSV文件实例教程

    以前导出总是用POI导出为Excel文件,后来当我了解到CSV以后,我发现速度飞快. 如果导出的数据不要求格式.样式.公式等等,建议最好导成CSV文件,因为真的很快. 虽然我们可以用Java再带的文件相关的类去操作以生成一个CSV文件,但事实上有好多第三方类库也提供了类似的功能. 这里我们使用apache提供的commons-csv组件 Commons CSV 文档在这里 http://commons.apache.org/ http://commons.apache.org/proper/co

  • java导出csv方法实现讲解

    首先,通过ibatis中的sql语句查询出所要得到的记录,并将其存放在List中: 复制代码 代码如下: List<?> results = this.reportService.getArrayBeanReportDataSource(super.getQuery_sql_csv(), query_obj); 这样的情况下,因为我们是要写公共方法,所以使用?而没有使用一个确定的类型来标注. 所以才需要使用反射从List里取出的对象的属性值. 复制代码 代码如下: String[] Colum

  • Java导出CSV文件的方法

    本文实例为大家分享了Java导出CSV文件的具体代码,供大家参考,具体内容如下 Java导出csv文件: 控制层: @Controller @RequestMapping("/historyReport/") public class HistoryStockReportController { private static final Logger LOGGER = LoggerFactory.getLogger(HistoryStockReportController.class)

  • 应用Java泛型和反射导出CSV文件的方法

    本文实例讲述了应用Java泛型和反射导出CSV文件的方法.分享给大家供大家参考.具体如下: 项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. 复制代码 代码如下: public <T> void saveFile(List<T> list, String outFile) throws IOException {         if (list == null || list.isEmpty())

  • java导出csv格式文件的方法

    本文实例为大家分享了java导出csv格式文件的具体代码,供大家参考,具体内容如下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException

  • Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法

    本文实例讲述了Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf-8 -*- """ Purpose: 生成日汇总对账文件 Created: 2015/4/27 Modified:2015/5/1 @author: guoyJoe """ #导入模块 import MySQLdb import time impor

  • C#读取csv格式文件的方法

    本文实例讲述了C#读取csv格式文件的方法.分享给大家供大家参考.具体实现方法如下: 一.CSV文件规则   1 开头是不留空,以行为单位. 2 可含或不含列名,含列名则居文件第一行. 3 一行数据不跨行,无空行. 4 以半角逗号(即,)作分隔符,列为空也要表达其存在. 5 列内容如存在半角逗号(即,)则用半角引号(即',')将该字段值包含起来. 6 列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来.

  • java生成xml格式文件的方法

    本文实例讲述了java生成xml格式文件的方法.分享给大家供大家参考,具体如下: 这里演示利用Java生成xml格式文件 Demo中所用到的jar包Jdom.jar . 为了方便理解,我写了个Demo import java.io.FileOutputStream; import java.io.IOException; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import

  • java导出json格式文件的示例代码

    本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: 生成json文件代码: import java.io.File; import java.io.FileWriter; import java.io.Writer; public class CreateFileUtil { /** * 生成.json格式文件 */ public static boolean createJsonFile(String jsonString, String filePath, String

  • Python操作CSV格式文件的方法大全

    目录 (一)CSV格式文件 (二)CSV库操作csv格式文本 (三)pandas库操作CSV文件 总结 (一)CSV格式文件 1.说明 CSV是一种以逗号分隔数值的文件类型,在数据库或电子表格中,常见的导入导出文件格式就是CSV格式,CSV格式存储数据通常以纯文本的方式存数数据表. (二)CSV库操作csv格式文本 操作一下表格数据: 1.读取表头的2中方式 #方式一 import csv with open("D:\\test.csv") as f: reader = csv.rea

  • 原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】

    本文实例讲述了原生PHP实现导出csv格式Excel文件的方法.分享给大家供大家参考,具体如下: 效果图 源码分析 index.php <?php require_once "./Export.php"; //测试数据 $headerList= ['列名1','列名2','列名3']; $data = [ ['值1','值2','值3'], ['值11','值22','值33'], ['值111','值222','值333'] ]; $fileName = "测试导出文

  • php将数组转换成csv格式文件输出的方法

    本文实例讲述了php将数组转换成csv格式文件输出的方法.分享给大家供大家参考.具体实现方法如下: <?php $sales = array( array('east','2005-01-01','2005-02-01',12.54), array('west','2005-01-01','2005-02-01',546.33), array('south','2005-01-01','2005-02-01',93.26), array('north','2005-01-01','2005-02

随机推荐