JAVA导出CSV文件

这篇具有很好参考价值的文章主要介绍了JAVA导出CSV文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方式一
@GetMapping("/vipExpire/downloadCsv")
    public void downloadCsv(@RequestParam Long taskId, HttpServletResponse response) {
        TaskService vipExpireService = taskServiceMap.get(TaskService.VIP_EXPIRE);
        FileTaskVo fileTask = taskBaseService.getById(taskId);
        List<TaskAplusExpire> list = vipExpireService.search(taskId, TaskAplusExpire.StatusEnum.KO.name());
        log.info("list size = {}",list.size());
        String fileName = fileTask.getFileName().substring(0,fileTask.getFileName().lastIndexOf("."))+"_err_data";

        this.writeCsv(response,fileName,list);
    }




    /**
     * CSV文件列分隔符
     */
    private static final String CSV_COLUMN_SEPARATOR = ",";
    /**
     * CSV文件行分隔符
     */
    private static final String CSV_ROW_SEPARATOR = System.lineSeparator();

    private static  final List<String> titleName = Arrays.asList("Pmid","Phone","Send Date","Code","Message");

    /**
     * @param response 响应流
     * @param fileName 文件名称
     * @param dataList  数据源
     */
    private void writeCsv(HttpServletResponse response, String fileName, List<TaskAplusExpire> dataList) {
        OutputStream out = null;
        try {
            StringBuffer buf = new StringBuffer();
            out = response.getOutputStream();
            String lastFileName = fileName + ".csv";
            response.setContentType("application/msexcel;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(lastFileName, "UTF-8"));

            // 组装表头
            for (String title : titleName) {
                buf.append(title).append(CSV_COLUMN_SEPARATOR);
            }
            buf.append(CSV_ROW_SEPARATOR);

            //组装行数据
            dataList.forEach(data->{
                buf.append(Optional.ofNullable(data.getPmid()).orElse("")).append(CSV_COLUMN_SEPARATOR);
                buf.append(Optional.ofNullable(data.getPhone()).orElse("")).append(CSV_COLUMN_SEPARATOR);
                buf.append(DateUtils.format(data.getSendDate())).append(CSV_COLUMN_SEPARATOR);
                buf.append(Optional.ofNullable(data.getCode()).orElse("")).append(CSV_COLUMN_SEPARATOR);
                buf.append(Optional.ofNullable(data.getMessage()).orElse("")).append(CSV_COLUMN_SEPARATOR);
                buf.append(CSV_ROW_SEPARATOR);
            });

            //添加bom,不加Excel打开中文会乱码
            out.write(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF });
            out.write(buf.toString().getBytes("UTF-8"));
        } catch (Exception e) {
           log.error("导出CSV异常",e);
        } finally {
            if (out != null) {
                try {
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    log.error("导出CSV异常",e);
                }
            }
        }
    }
方式二

使用CSVWriter

/**
* @param response 响应流
* @param fileName 文件名称
* @param dataList  数据源
*/
private void writeCsv2(HttpServletResponse response, String fileName, List<TaskAplusExpire> dataList) {
    String lastFileName = fileName + ".csv";
    response.setContentType("application/msexcel;charset=UTF-8");
    try {
        response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(lastFileName, "UTF-8"));
        PrintWriter out = response.getWriter();
        // 手动加上BOM标识
        out.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }));
        
        // 设置显示的顺序,数据源对象属性列表
        String[] columnMapping = { "pmid", "phone", "sendDate", "code", "message" };
       
        ColumnPositionMappingStrategy<TaskAplusExpire> mapper =
            new ColumnPositionMappingStrategy<TaskAplusExpire>();

        //数据源类型
        mapper.setType(TaskAplusExpire.class);
        mapper.setColumnMapping(columnMapping);

        // 写表头
        CSVWriter csvWriter = new CSVWriter(response.getWriter(), CSVWriter.DEFAULT_SEPARATOR,
                                            CSVWriter.NO_QUOTE_CHARACTER);
        String[] header = { "Pmid","Phone","Send Date","Code","Message"};
        csvWriter.writeNext(header);

        StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(out)
            .withMappingStrategy(mapper)
            .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
            .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
            .withEscapechar('\\').build();
        beanToCsv.write(dataList);
        csvWriter.close();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }catch (CsvDataTypeMismatchException e) {
        e.printStackTrace();
    } catch (CsvRequiredFieldEmptyException e) {
        e.printStackTrace();
    }
Excel打开中文乱码问题

Excel 在读取 csv 的时候是通过读取文件头上的 bom 来识别编码的,这导致如果我们生成 csv 文件的平台输出无 bom 头编码的 csv 文件(例如 utf-8 ,在标准中默认是可以没有 bom 头的),Excel 只能自动按照默认编码读取,不一致就会出现乱码问题了。

解决:
写入的时候加上: out.write(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF });文章来源地址https://www.toymoban.com/news/detail-597849.html

到了这里,关于JAVA导出CSV文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 读取,写入csv文件

    本人因为业务需要,需要对csv类的数据文件进行处理,下面就直接上一下代码,希望能帮到各位; 读取csv文件 过程很简单: 1.就是根据提供的文件路径判断文件是否存在; 2.如果存在开始用流读取文件内容; 3.读取到文件内容之后就开始处理相应的数据; 写入文件 整体流程

    2024年02月11日
    浏览(62)
  • Java课题笔记~ Servlet编程

    (1)什么是Servlet Servlet是基于Java语言的Web编程技术,部署在服务器端的Web容器里,获取客户端的访问请求,并根据请求生成响应信息返回给客户端。 创建Servlet的方式,有 如下图:一般创建Servlet都是通过继承HttpServlet来实现,如图中的HelloServlet。 (类图快捷键:Ctrl + Alt + U)

    2024年02月13日
    浏览(33)
  • 通过Java读取csv文件内容

    1、通过 FileReader(String fileName) 读取整个文件,并通过 BufferedReader(Reader in) 作为每行的缓冲; 2、在通过 readLine() 读取每行内容,通过空格作为分隔符,每行转为数组,并存在 ListString[] 列表中; 3、最后打印 csv文件中的内容。 csv 文件内容如下: 打印的代码如下: 输出的内容

    2024年02月15日
    浏览(37)
  • java环境下读取CSV文件

    目录 一、CSV文件简介 1.1.CSV文件介绍 1.2.CSV文件特点  1.3. CSV文件规则 1.4.编者记录  二、CSVParser文件读取   2.1.POM文件----commons-csv作为三方类库  2.2.测试代码  2.3.优缺点 三、将CSV文件转化为Excel的xlsx文件 3.1.POM文件   3.2.测试代码  3.3.运行结果  3.4.优缺点 四、CsvReader文件

    2024年02月08日
    浏览(36)
  • 在 Java 中读取 CSV 文件

    CSV 代表逗号分隔值,是一种非常流行的文件类型。CSV文件用于存储由逗号分隔的信息。文件的每一行都用于表示一个数据记录。在本教程中,我们将学习如何读取 CSV 文件并将其内容复制到数组或列表中。在本教程中,我们将使用仅包含三条记录的简单 CSV 文件。该文件的内

    2023年04月17日
    浏览(36)
  • [JAVA EE]创建Servlet——实现Servlet接口笔记1

    创建Servlet的方式之一:实现servlet接口 servlet的生命周期: 1、实例化:创建servlet实例对象 2、初始化:调用init方法完成初始化工作 3、服务:调用service方法来处理用户请求 4、销毁:调用destroy方法来释放占用的内存资源 通过service方法处理用户的请求: 通过request(servletReque

    2024年02月03日
    浏览(47)
  • Servlet | Servlet原理、开发第一个带有Java小程序Servlet

    ✅作者简介:一位材料转码农的选手,希望一起努力,一起进步!  📃个人主页:@每天都要敲代码的个人主页 🔥系列专栏:Web后端 | Servlet 目录 一:模拟实现Servlet 二:开发第一个带有Java小程序Servlet【重点】 有了上一章节的分析,我们来模拟实现以下Servlet;下面先分析一

    2024年02月02日
    浏览(46)
  • 【Java】小白友好的Servlet基础学习笔记

    后面比赛挺多,RW体验赛,西湖论剑,beginCTF,N1CTF,hgame,NSS新春赛,NSS Round17,SICTF,有观赏性大于操作性的,有萌新可以真正去打的。经过慎重考虑,决定java先暂放几天,再回过头去练练老题,也是换换脑子。 目录 Servlet 工作流程: 实现方式: 生命周期: Tomcat HttpServl

    2024年02月19日
    浏览(41)
  • hive 导入导出csv文件

    1、导入 将CSV文件导入到hive数据库,具体操作如下, 首先在hive中创建自己的table, 并且设置以逗号分隔。 然后 确定tmp.hb_label_C表的分布式文件路径 最后在linux命令行输入 查看结果 2、导出 使用beeline重定向 同时使用以下方式导出数据带表头

    2024年02月16日
    浏览(45)
  • 博客系统 Java Web 开发(Servlet)

    目录 一、准备工作 二、设计数据库 三、编写数据库代码 1、建表sql 2、封装数据库的连接操作 3、创建实体类 4、封装数据库的一些增删改查 (1)BlogDao 新增博客:  根据博客 id 来查询指定博客(用于博客详情页) 直接查询出数据库中所有的博客列表 删除博客 (2)UserDao

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包