导出csv格式的文件

项目要求导出csv格式的文本,特此记录一下,中间还是遇到了不少的问题

在Java中,你可以使用不同的库来导出CSV格式的文件。我将向你展示一个简单的例子,使用纯Java和字符串操作来创建CSV文件。但是,请注意,对于大型数据集,使用专门的CSV库(如Apache Commons CSV或OpenCSV)会更有效。

import java.io.FileWriter;  
import java.io.IOException;  
  
public class CsvExporter {  
  
    public static void main(String[] args) {  
        String csvFile = "path/to/your/file.csv";  
        FileWriter writer = null;  
  
        try {  
            writer = new FileWriter(csvFile);  
  
            // 写入标题行  
            String header = "Column1,Column2,Column3";  
            writer.append(header);  
            writer.append('\n');  
  
            // 写入一些数据  
            String data1 = "Data1";  
            String data2 = "Data2";  
            String data3 = "Data3";  
  
            String line = data1 + "," + data2 + "," + data3;  
            writer.append(line);  
            writer.append('\n');  
  
            // 这只是一个例子,你可以根据需要添加更多数据  
  
            System.out.println("CSV file was created successfully !!!");  
  
        } catch (Exception e) {  
            System.out.println("Error in CsvFileWriter...");  
            e.printStackTrace();  
        } finally {  
            try {  
                writer.flush();  
                writer.close();  
            } catch (IOException e) {  
                System.out.println("Error while flushing/closing writer...");  
                e.printStackTrace();  
            }  
        }  
    }  
}

如何使用POI

List<List<Object>> dataList=new ArrayList<>();
            for (TestEntitytestEntity:
            addTest) {
                List<Object> data= new ArrayList<>();
                data.add(testEntity.getName());
                data.add(testEntity.getUserid());
                if (stringListMap.size()>0){
                    data.add(stringListMap.get(testEntity.getOwOpenid()).getPhone());
                    data.add(stringListMap.get(testEntity.getOwOpenid()).getNickName());
                }
                dataList.add(data);
            }

// poi导出csv
            List<Object> headList=new ArrayList<>();
            headList.add("name");
            headList.add("userId");
            headList.add("phone");
            headList.add("nickname");
			Date date = new Date();
            String format = new SimpleDateFormat("yyyy-mm-dd").format(date);
            String hh = new SimpleDateFormat("HH").format(date);
            String fileName=format+"快照数据"+hh;
            CSVUtil.createCSVFile(response,headList,dataList,fileName);

CSV文件导出工具类

package com.zkys.product.common.utils;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;
 
/**
 *
 * CSV文件导出工具类
 *
 * @author qixin
 * @description TODO
 * @data 2018/7/10 19:25
 * Version 1.0
 */
public class CSVUtil{
 
    /**
     * CSV文件生成方法
     * @param
     * @param head
     * @param dataList
     * @param filename
     */
    public static void createCSVFile(HttpServletResponse response, List<Object> head, List<List<Object>> dataList,
                                     String filename) {
        File csvFile = null;
        BufferedWriter csvWtriter = null;
        InputStream in = null;
        OutputStream out = null;
        try {
            csvFile=new File("./"+filename+".csv");

            // GB2312使正确读取分隔符","
            csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
                    csvFile), "GBK"), 1024);

            // 写入文件头部
            writeRow(head, csvWtriter);
 
            // 写入文件内容
            for (List<Object> row : dataList) {
                writeRow(row, csvWtriter);
            }
            csvWtriter.flush();

            in = new FileInputStream(csvFile);
            int len = 0;
            byte[] buffer = new byte[1024*1024*5];
            out = response.getOutputStream();
            response.reset();

            // 设置此response为文件下载响应
            response.setContentType("application/csv;charset=UTF-8");
            response.setHeader("Content-Disposition",
                    "attachment; filename=" + URLEncoder.encode(csvFile.getName(), "UTF-8"));
            response.setCharacterEncoding("UTF-8");
            // 先写UTF-8文件标志头
            out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
            while ((len = in.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
                if (csvFile != null) {
                    csvFile.delete();
                }
                if (csvWtriter != null) {
                    csvWtriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
    /**
     * 写一行数据方法
     * @param row
     * @param csvWriter
     * @throws IOException
     */
    private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException {
        // 写入文件头部
        for (Object data : row) {
            StringBuffer sb = new StringBuffer();
            String rowStr = sb.append("\"").append(data).append("\",").toString();
            csvWriter.write(rowStr);
        }
        csvWriter.newLine();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渐暖°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值