• Java生成CSV文件实例详解


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

    1、新建CSVUtils.java文件:

    package com.saicfc.pmpf.internal.manage.utils;
    
    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使正确读取分隔符","
                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 = "c:/export/";
            String fileName = "文件导出";
            File file = CSVUtils.createCSVFile(exportData, map, path, fileName);
            String fileName2 = file.getName();
            System.out.println("文件名称:" + fileName2);
        }
    }

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

      public static void main(String[] args) {
            String name = "银行退款数据";
            List exportData = new ArrayList();
            LinkedHashMap datamMap = null;
            for (Iterator iterator = refundList.iterator(); iterator.hasNext();) {
                HashMap map = (HashMap) iterator.next();
                datamMap = new LinkedHashMap();
                datamMap.put("1", map.get("merOrderId"));
                datamMap.put("2", DateUtil.convertDateToString("yyyyMMdd", 
                        (Date) map.get("orderTime")));
                BigDecimal amount = (BigDecimal) map.get("amount");
                String amountString = amount.divide(new BigDecimal(10)).toPlainString();
                datamMap.put("3", amountString);
                datamMap.put("4", map.get("remark") != null ? map.get("remark") : "");
                exportData.add(datamMap);
            }
            LinkedHashMap map = new LinkedHashMap();
            map.put("1", "订单号");
            map.put("2", "支付日期");
            map.put("3", "退货现金金额(整数金额 单位:分)");
            map.put("4", "退货原因");
            File file = CSVUtils.createCSVFile(exportData, map, filePath, name);// 生成CSV文件
            fileName = file.getName();
            CSVUtils.exportFile(response, filePath + fileName, fileName);// 下载生成的CSV文件
        }

    本文转自:http://www.jb51.net/article/52724.htm

  • 相关阅读:
    第四章作业
    第二章上机实验报告
    对二分法的理解和结对编程情况
    Mysql与sql server的列的合并
    C#中如何去除窗体默认的关闭按钮
    C# 实现WinForm窗口最小化到系统托盘代码,并且判断左右鼠标的事件
    running total sql 2012+
    Poqwe Pivot error
    事务
    ssis 导EXCEL ERROR
  • 原文地址:https://www.cnblogs.com/dreammyle/p/5458280.html
Copyright © 2020-2023  润新知