springboot 导出CSV

SpringBoot 导出数据至CSV文件 1、大数据量情况下导出csv格式文件,一般使用多线程分批读取到内存中,这样可以避免OOM情况,同时也可以使用消息队列方式,这样也可以实现数据削峰读取,本文主要是记录核心的导出CSV功能,架构没有在此文中实现。2、csv导出核心代码。 阅读详情

java 导出csv

导出csv 时候, 遇到中文乱码的问题,最终这一版,解决了问题

下面是导出csv工具类

package com.basetnt.zhilian.coupon.common.util;
import org.apache.commons.collections.CollectionUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Desc 导出csv线上版本
 * @Date 2019/2/18 16:10
 * @Author cui_yl
 */
public class CsvExportUtil {
    /**
     * CSV文件列分隔符
     */
    private static final String CSV_COLUMN_SEPARATOR = ",";

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

    /**
     * @param dataList 集合数据
     * @param titles   表头部数据
     * @param keys     表内容的键值
     * @param os       输出流
     */
    public static void doExport(List<Map<String, Object>> dataList, String titles, String keys, OutputStream os) throws Exception {

        // 保证线程安全
        StringBuffer buf = new StringBuffer();

        String[] titleArr = null;
        String[] keyArr = null;

        titleArr = titles.split(",");
        keyArr = keys.split(",");

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

        // 组装数据
        if (CollectionUtils.isNotEmpty(dataList)) {
            for (Map<String, Object> data : dataList) {
                for (String key : keyArr) {
                    buf.append(data.get(key)).append(CSV_COLUMN_SEPARATOR);
                }
                buf.append(CSV_ROW_SEPARATOR);
            }
        }

        // 写出响应
        os.write(buf.toString().getBytes("GBK"));
        os.flush();
    }

    /**
     * 设置Header
     *
     * @param fileName
     * @param response
     * @throws UnsupportedEncodingException
     */
    public static void responseSetProperties(String fileName, HttpServletResponse response) throws UnsupportedEncodingException {
        // 设置文件后缀
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String fn = fileName + sdf.format(new Date()) + ".csv";
        // 读取字符编码
        String utf = "UTF-8";

        // 设置响应
        response.setContentType("application/ms-txt.numberformat:@");
        response.setCharacterEncoding(utf);
        response.setHeader("Pragma", "public");
        response.setHeader("Cache-Control", "max-age=30");
        response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fn, utf));
    }

}

下面是调用

    //优惠码管理中导出优惠券
    @ApiOperation(value = "优惠码管理中导出优惠券", notes = "优惠码管理中导出优惠券")
    @GetMapping(value = "/*****}")
    @RequiresRoles(value={"admin", "***", "***"}, logical= Logical.OR)
    public void csv(HttpServletResponse response, @PathVariable Integer id,  @RequestParam(value = "Token", required = true) String authorization){
        try {
            // 查询需要导出的数据
            CouponForm record = couponService.couponDetail(id);

            // 构造导出数据结构
            String titles = "id,任务名,优惠券类型,优惠券价值,生效日期,截止日期,优惠码";  // 设置表头
            String keys = "id,task,type,price,startTime,endTime,code";  // 设置每列字段

            // 构造导出数据
            List<Map<String, Object>> datas = new ArrayList<>();
            Map<String, Object> map = null;
            Coupon coupon = record.getCoupon();
            Float price = coupon.getPrice()/100F;
            String type = "一次性码";
            if (coupon.getType() == CouponType.Common.value()){
                type = "通用码";
            }

            if (null != record && null != coupon){
                for (CouponCode data : record.getCodeList()) {
                    map = new HashMap<>();
                    map.put("id", coupon.getId());
                    map.put("task", coupon.getTask());
                    map.put("type", type);
                    map.put("price", String.format("%.2f",price));
                    map.put("startTime", DateUtils.dateToString(coupon.getStartTime(), DateUtils.formatter_yyyyMMdd));
                    map.put("endTime", DateUtils.dateToString(coupon.getEndTime(), DateUtils.formatter_yyyyMMdd));
                    map.put("code", data.getCode());
                    datas.add(map);
                }
            }

            // 设置导出文件前缀
            String fName = "优惠券详情_";

            // 文件导出
            OutputStream os = response.getOutputStream();
            CsvExportUtil.responseSetProperties(fName, response);
            CsvExportUtil.doExport(datas, titles, keys, os);
            os.close();
        } catch (Exception e) {
            logger.error("导出失败"+e.getMessage(), e);
        }
    }
Spring Boot导出csv文件工具类简介说明 阅读详情

相关推荐

java springboot 导出文件csv

优点:可以大数据量导出,效率快 一、 public void exportExcel() throws Exception { //1、查询数据 List<Map<String, Object>> list = baseMapper.exportCsv(); //如果需要对查出来的数据进行处理,可以新建List,遍历查询结果,处理完后添加到List //List<Map<String, Object>> dataList = new ArrayList&

wanglu0102的博客 1800

SpringBoot开发——整合OpenCSV 实现数据导入导出-CSV

SpringBoot开发——数据导入导出-CSV

bjzhang75的博客 1800

springboot导出下载csv文件

首先效果图如下所示:数据从数据库查询出来之后导出csv文件 csv文件其实就是将数据进行逗号分隔,但是csv文件还支持使用excel/wps 来打开,下面就是我使用excel打开后的数据格式: 其实总体实现还是比较简单的,就是将从数据库查询出来的数据写进csv文件 其他就不多说了,下面直接上代码: package com.example.txsmsboot.controller; import com.example.txsmsboot.entity.Teacher; impor..

royal1235的博客 1492

springboot 实现csv导入导出功能。

SpringBoot导入和导出Csv文件

u010797364的博客 2987

SpringBoot导出下载csv文件

java导出下载csv文件说明工具类代码Controller代码 说明 今天看到需求里面有个需要将数据导成csv文件的格式,这里记录下自己的实现过程。直接上后端代码,这里用的springboot框架实现。 工具类代码 工具类代码下面最下面有一个main方法可直接执行导出功能,你可以用这个测试数据看看效果。 package com.etone.project.utils; import org.apache.commons.beanutils.BeanUtils; import org.slf4j.Logg

weixin_48040732的博客 7986

boot spring 解析csv_SpringBoot+CSV导出

源码:http://pan.baidu.com/s/1pLsiXZ1在线联系:QQ:179061434pom.xml添加依赖: CSV导出importdemo.spring.mybatis.config.ExportUtil;importdemo.spring.mybatis.model.UserModel;importdemo.spring.mybatis.service.DemoService...

weixin_39581972的博客 198

springboot导出csv文件

1.csv导出工具类 import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServlet

xiegongmiao的博客 3709

SpringBoot JAVA导出数据到CSV文件

1.CSV工具类 import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVPrinter; import org.apache.commons.csv.CSVRecord; import org.springframewo...

rhx_1989的专栏 6262

Spring Boot 导出csv文件

1. 导出文件工具类 @Slf4j public class ExportUtil { /** CSV文件列分隔符 */ private static final String CSV_COLUMN_SEPARATOR = ","; /** CSV文件列分隔符 */ private static final String CSV_RN = "\r\n"; ...

jeikerxiao 1万+

spring boot axios导出后缀是csv,xls,xlsx文件

spring boot axios导出CSV文件引言开发环境前端界面前端代码axios 的api配置后端代码 引言 小编是一个比较喜欢研究的人,项目中经常需要导出附件的操作,前端时间一直想仔细研究,尝试了几次都没成功,这次项目开发有大量的导出操作,所以小编不得不静下心来仔细研究研究。 本次研究小编一共研究了CSV,xls,xlsx文件导出操作。话不多说,直接上代码,希望对您有帮助。...

柳牧之的博客 1159

Springboot集成Hutool导出CSV

【代码】Springboot集成Hutool导出CSV

weixin_54009596的博客 300

Spring Boot下的一种导出CSV文件的代码框架

1、前言 ​ CSV,逗号分隔值(Comma-Separated Values),即为逗号分隔的文本文件。如果值中含有逗号、换行符、制表符(Tab)、单引号及双引号,则需要用双引号括起来;如果值中包含双引号,则需要用两个双引号来替换。 ​ CSV大量用于不同系统之间的数据交换,是一种非常常用的文件格式。 ​ 在Spring Boot项目中,将数据导出CSV格式文件是常见的功能。与Excel文件导出类似,此处也用代码框架式的方式实现CSV文件导出,使得代码具有可重用性,并保持导出数据转换的灵活性。 2

alabo1999的博客 695

SpringBoot导入和导出Csv文件

csv

kang1011的博客 876

SpringBoot实现百万级数据高效导出Excel和CSV实战

本文分享了百万级数据高效导出的完整解决方案。针对传统导出方式导致的内存溢出、响应慢等问题,提出分批查询、流式写入和异步处理的核心思路。技术选型上对比了CSV和Excel的优缺点,推荐使用EasyExcel处理Excel导出。通过代码示例展示了CSV和Excel的分批导出实现,以及异步导出任务管理。最后给出性能优化要点,包括数据库查询优化、内存管理和文件存储策略,并强调异常处理和监控的重要性。这套方案可有效解决大数据量导出的性能瓶颈问题。

qq_45228323的博客 733

Springboot导出大数据量excel(三)-导出csv到压缩包

一、简介 在上篇文章《Springboot导出大数据量excel(二)-分页查询数据List<Map>》说道excel的最大支持数据行数1048576(2的20次方)。本文内容主要就是解决这个问题。 二、效果展示 导出200行数据,每个文件存储10万行数据。 三、源码 controller @RequestMapping(value = "export5", method = RequestMethod.GET) @ApiOperation(value =...

阿瑟与非 3083

SpringBoot导入和导出Csv文件(二十八)

主要内容: 1. csv文件 2. hutool处理csv文件的几个类 3. hutool处理csv的写入和读取 4. SpringBoot 导入和导出 csv文件实例

两个蝴蝶飞 9222

SpringBoot 实现百万级数据高效导出Excel和CSV

本文探讨了百万级数据高效导出的解决方案。针对传统全量导出方式存在的内存溢出、响应时间长等问题,提出采用分批查询、流式写入和异步处理三大核心技术。对比分析了CSV和Excel两种格式的优劣,并给出基于Java原生IO流和EasyExcel的具体实现方案。文章详细介绍了异步导出实现、性能优化要点(包括数据库查询、内存管理和文件存储优化)以及异常处理与监控机制。最后提出最佳实践建议,强调合理设置批次大小、进度提示和权限控制等关键因素。该方案有效解决了大数据量导出的性能瓶颈,显著降低内存占用,提升系统稳定性和用户体

wjianwei666的专栏 147
上一篇: springboot定时任务入门
下一篇: springboot 前后端分离项目 生成验证码
fengzyf
博客等级 码龄8年 27粉丝 55原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值