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


目录
相关文章
|
4月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
前端开发 JavaScript 数据可视化
Echarts 折线图完全配置指南 - 手把手教你设置 Echarts 折线图详细教程
Echarts 折线图是图表中最常用的显示形式之一。使用 Echarts 做出基本的折线图很简单,但要是想把多组数据放在一张图表中,展示的漂亮又直观就不容易了。本文将带领大家从最基本的折线图,一步步完善,最终做出可读性很高的可视化图表。 根据本教程在卡拉云中搭建的折线图 Demo,你可以立即注册卡拉云,跟随本教程学习 跟随本教程你将学到 1.折线外观属性 折线增加弧线平滑过渡 折线图变为散状圆点 实线改为虚线 折线指定颜色 增加数据显示 表格外观属...
1747 0
SpringBoot导入和导出Csv文件(二十八)中
SpringBoot导入和导出Csv文件(二十八)中
3242 0
SpringBoot导入和导出Csv文件(二十八)中
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
1558 10
|
机器学习/深度学习 人工智能 自然语言处理
阿里云百炼大模型:引领企业智能化升级的下一代 AI 驱动引擎
随着人工智能技术的快速发展,大规模预训练模型正在改变各行各业的智能化进程。阿里云百炼大模型(Ba-Lian Large Model)作为阿里云推出的企业级 AI 解决方案,通过深度学习、自然语言处理、计算机视觉等前沿技术,帮助企业实现智能化升级,提升业务效率和创新能力。本文将详细介绍阿里云百炼大模型的核心技术、应用场景及其优势,帮助企业更好地理解和利用这一革命性工具。
2832 2
|
Java
springboot将list封装成csv文件
springboot将list封装成csv文件
236 4
|
缓存 监控 Java
Spring Boot中的缓存配置与优化
Spring Boot中的缓存配置与优化
|
数据安全/隐私保护 索引 Python
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
268 0
|
存储 JavaScript API
❤Nodejs 第十三章(文件上传接口以及token添加)
【4月更文挑战第13天】Nodejs第十三章介绍了文件上传接口和Token添加。使用Multer库处理文件上传,设置存储引擎和静态文件目录,定义上传接口,支持单个文件上传。上传成功返回文件信息和访问路径。为解决静态文件访问需要Token认证的问题,更新expressjwt配置,排除包含uploads的路径,确保静态文件可正常访问。
307 2
|
前端开发 Java
SpringBoot导入和导出Csv文件(二十八)下
SpringBoot导入和导出Csv文件(二十八)下
2944 0
SpringBoot导入和导出Csv文件(二十八)下