`
terry0501
  • 浏览: 313932 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

生成csv文件工具类

 
阅读更多

package com.mobanker.tkj.cw.core.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
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;
import org.apache.log4j.Logger;


public class CSVUtils
{
   static Logger logger=Logger.getLogger(CSVUtils.class);
    /**
     * 生成为CVS文件
     * @param exportData
     *       源数据List
     * @param map
     *       csv文件的列表头map
     * @param outPutPath
     *       文件路径
     * @param fileName
     *       文件名称
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static File createCSVFile(List<Map> exportData, Map 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));
        csvFile = new File(outPutPath, fileName+".csv");
        logger.debug(">>>>>>>>>>>>>>>>>>csvFile:" + csvFile);
        // 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();
            if(propertyEntry.getKey()!=null&&BeanUtils.getProperty(row,(String) propertyEntry.getKey())!=null){
                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;
    }
    /**
     *
     * <b>Description:</b>〈方法详细描述〉<br/>
     * @param exportData
     * @param map
     * @param csvFile
     * @return
     * @author gaohailiang <br/>
     * Create date: 2016年12月9日
     * @throws IOException
     */
    public static File apendCSVFile(List<Map> exportData, Map map, File csvFile) throws IOException {
         BufferedWriter csvFileOutputStream = null;
         try {
           // UTF-8使正确读取分隔符","
           csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile,true), "UTF-8"), 1024);
           System.out.println("csvFileOutputStream:" + csvFileOutputStream);
           // 写入文件内容
           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();
               if(propertyEntry.getKey()!=null&&BeanUtils.getProperty(row,(String) propertyEntry.getKey())!=null){
                   csvFileOutputStream.write((String) BeanUtils.getProperty(row,(String) propertyEntry.getKey()));
               }
               if (propertyIterator.hasNext()) {
                 csvFileOutputStream.write(",");
               }
             }
              csvFileOutputStream.newLine();
           }
           csvFileOutputStream.flush();
           exportData.clear();
         } 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 = "c:/export/";
      String fileName = "文件导出";
      File file = CSVUtils.createCSVFile(exportData, map, path, fileName);
      String fileName2 = file.getName();
      System.out.println("文件名称:" + fileName2);
    }
}

分享到:
评论

相关推荐

    csv文件生成工具类

    CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。 CSV是一种通用的、相对简单的...

    FTP上传文件压缩文件生成CSV文件

    在这个项目中,首先,CSVUtils将生成或处理CSV文件,然后FileZipUtils将这些CSV文件压缩成一个ZIP文件。接着,FTPUtils使用FTP协议将这个ZIP文件上传到远程FTP服务器。IOUtil则在整个过程中提供辅助的I/O操作,例如...

    java读取csv文件并将读取的数据写入新生成的csv文件

    在我们需求中需要读取一个csv文件的数据,但是只有旧的csv的几列数据再新写入一个csv文件,而且在旧的数据有空的数据,需要判断旧的csv的空值。可能写的存在不完善!但是应用的需求里面还是能用的

    CSV文件合并工具

    在实际应用中,CSV文件合并工具通常适用于数据分析、报表生成、数据库导入导出等多种场景。无论是企业内部的数据整理,还是跨部门的数据共享,都能够显著提高数据处理效率。使用该工具,用户可以避免手动操作带来的...

    csv文件解析小工具 可直接运行

    这个“csv文件解析小工具”是专为处理这类文件而设计的,允许用户直接运行并解析CSV内容。 解析CSV文件的主要挑战在于处理各种边缘情况,例如: 1. **字段内包含逗号**:当某个字段值本身含有逗号时,通常会用双...

    CSV大文件分割工具.rar

    5. 点击开始或分割按钮,工具将自动完成分割过程,生成多个小的CSV文件。 在实际应用中,这个工具可能适用于数据分析师、程序员、数据库管理员等需要处理大量数据的人员。它简化了大CSV文件的管理和分析流程,使得...

    csv拆分工具.rar

    3. **拆分过程**:工具会读取大CSV文件,按预设规则分割,然后将每个部分保存为新的CSV文件。拆分过程中可能需要考虑保留原始列名,并确保新文件的正确性。 4. **效率与性能**:为了提高拆分效率,工具可能采用流式...

    用Qt写的生成csv的程序,使用方法在文件的注释里

    在Qt中,生成CSV文件主要涉及到`QFile`、`QTextStream`和可能的`QStringList`类。`QFile`用于打开和关闭文件,而`QTextStream`则允许我们以文本格式读写数据。首先,创建一个`QFile`对象,指定要创建的CSV文件路径。...

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

    总之,Java生成CSV文件时,要确保正确设置编码(如UTF-8)并考虑是否需要BOM。在处理非ASCII字符时,尤其要注意这一点,以防止出现乱码。此外,示例代码提供了一个基本的CSV文件读写框架,但实际应用中可能需要根据...

    java 导出csv文件并上传sftp

    本篇文章将深入探讨如何使用univocity-parsers库来创建CSV文件,以及如何利用JSCH库将生成的CSV文件上传到SFTP(Secure File Transfer Protocol)服务器。 首先,让我们了解univocity-parsers库。这是一个强大的...

    java导出生成csv文件的方法

    为了解决这个问题,开发者可以转向生成CSV文件,因为CSV文件本质上是文本文件,生成和读取都非常高效。 【Java生成CSV文件的方法】 以下是一个简单的Java类`CsvUtil`,用于导出CSV格式的文件: ```java public ...

    poi导出cvs文件

    尽管POI主要设计为处理XLS和XLSX格式,但通过简单的转换,我们也能利用它生成CSV文件。 首先,我们需要在项目中引入Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...

    将多个csv文件合并成一个csv文件的工具,C#编写,含源代码。支持忽略列头

    本话题关注的是如何使用C#编程语言来实现一个工具,将多个CSV文件合并为一个单一的CSV文件,同时支持忽略列头。 首先,我们要理解CSV文件的结构。CSV文件是一种纯文本文件,每一行代表一行数据,列与列之间由逗号...

    java读写csv文件,中文乱码问题

    在处理CSV文件时,尤其是涉及中文字符时,可能会遇到乱码问题。这个问题通常与字符编码设置有关。下面我们将深入探讨如何在Java中正确地读取和写入CSV文件,以及解决中文乱码的问题。 1. **字符编码的理解**: - ...

    java 大数据导出csv小工具

    7. `commons-collections-3.2.1.jar`:Apache Commons Collections库,提供了各种集合操作的实用工具类,可能用于数据处理和转换。 总结来说,这个Java工具是一个高效的数据导出解决方案,尤其针对Oracle数据库,它...

    Java生成CSV文件实例详解

    下面将详细解释如何使用Java生成CSV文件,以`CSVUtils`类为例进行说明。 首先,`CSVUtils`类通常包含用于生成CSV文件的核心方法。在给出的代码中,`createCSVFile`方法是生成CSV文件的主要入口。该方法接收四个参数...

    csv加密工具

    3. **读取CSV文件**:使用C++标准库中的`fstream`类读取CSV文件的内容。确保正确处理文件的读取错误和结束标志。 4. **加密数据**:将读取到的CSV内容作为明文,使用AES的加密函数进行加密。在Crypto++库中,这通常...

    csv大文件打开器

    因此,"csv大文件打开器"应运而生,这类工具专门设计用于处理大型CSV文件。 CSV文件的结构: 1. CSV文件以逗号作为字段分隔符,每一行代表一条记录,每个字段间用逗号分隔。如果字段内包含逗号,通常会使用引号进行...

    VB操作EXCEL的csv文件

    4. **写入数据**:如果需要将数据写入CSV文件,可以使用`StreamWriter`类。首先创建一个`StreamWriter`实例,然后逐行写入数据,每一行结束时调用`WriteLine`。 5. **CSV文件操作示例**: - **内容相加**:假设...

    CSV解析包工具

    在Java开发中,掌握如何使用OpenCSV这样的库处理CSV文件是一项基本技能,特别是在数据导入导出、数据分析和报告生成等场景中,它的作用尤为重要。理解并熟练运用OpenCSV可以极大地提升工作效率,降低代码复杂性。

Global site tag (gtag.js) - Google Analytics