导出csv格式的文件

简介: 导出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();
    }
}


目录
相关文章
|
2月前
|
存储 Python
CSV文件
【10月更文挑战第18天】CSV文件
113 2
|
4月前
|
存储 Python
使用CSV模块读取CSV文件--含代码
使用CSV模块读取CSV文件--含代码
44 0
|
数据处理
R|批量循环处理同一格式文件-csv,txt,excel
R|批量循环处理同一格式文件-csv,txt,excel
127 0
|
数据处理 Python
多线程操作CSV文件并且将CSV文件转成XLSX文件
多线程操作CSV文件并且将CSV文件转成XLSX文件
247 0
|
关系型数据库 数据库 PostgreSQL
导出CSV文件
导出CSV文件
388 0
Biopython:Fasta格式转CSV格式
Biopython:Fasta格式转CSV格式
400 0
Biopython:Fasta格式转CSV格式
CSV 文档格式
csv 中的第一行表示字段名,第二行表示字段值 比如你要实现下列静态数据: [ { "x": "1月", "y": 2, "s": "蒸发量" }, { "x": "1月", "y": 2.
6556 0
|
Python Windows

热门文章

最新文章