当前位置: 代码网 > it编程>编程语言>Java > Springboot集成Hutool导出CSV的方法

Springboot集成Hutool导出CSV的方法

2026年01月05日 Java 我要评论
1. 引入依赖 <dependency> <groupid>cn.hutool</groupid> <artifactid>hutool

1. 引入依赖

 <dependency>
     <groupid>cn.hutool</groupid>
     <artifactid>hutool-all</artifactid>
     <version>5.8.11</version>
 </dependency>

2. csv工具类

import cn.hutool.core.text.csv.csvutil;
import cn.hutool.core.text.csv.csvwriter;
import lombok.extern.slf4j.slf4j;
import javax.servlet.http.httpservletresponse;
import java.io.ioexception;
import java.io.outputstream;
import java.io.outputstreamwriter;
import java.lang.reflect.field;
import java.net.urlencoder;
import java.nio.charset.standardcharsets;
import java.util.list;
import java.util.map;
import java.util.zip.zipentry;
import java.util.zip.zipoutputstream;
@slf4j
public class csvutils {
    public static <t> void export(httpservletresponse response, string filename, list<t> datalist) throws ioexception {
        // 设置响应内容类型
        response.setcontenttype("text/csv");
        response.setcharacterencoding(standardcharsets.utf_8.name());
        filename = urlencoder.encode(filename, standardcharsets.utf_8);
        response.setheader("content-disposition", "attachment;filename=\"" + filename + ".csv\"");
        try (outputstream out = response.getoutputstream();
             outputstreamwriter writer = new outputstreamwriter(out, standardcharsets.utf_8)) {
            // 写入utf-8 bom,帮助notepad识别
            writer.write("\ufeff");
            // 使用hutool的csvwriter
            csvwriter csvwriter = csvutil.getwriter(writer);
            for (t data : datalist) {
                string[] row = converttorow(data);
                csvwriter.write(row);
            }
            // 确保所有数据写入输出流
            csvwriter.flush();
        }
    }
    public static <t> void exportzip(httpservletresponse response, map<integer, list<t>> datalists) throws ioexception {
        // 设置响应内容类型
        response.setcontenttype("application/zip");
        response.setcharacterencoding(standardcharsets.utf_8.name());
        string zipfilename = urlencoder.encode("地区结果.zip", standardcharsets.utf_8);
        response.setheader("content-disposition", "attachment;filename=\"" + zipfilename + "\"");
        // 创建zip输出流
        try (outputstream out = response.getoutputstream();
             zipoutputstream zipout = new zipoutputstream(out, standardcharsets.utf_8)) {
            for (map.entry<integer, list<t>> listentry : datalists.entryset()) {
                integer filename = listentry.getkey();
                list<t> datalist = listentry.getvalue();
                // 创建zip条目
                zipentry zipentry = new zipentry(filename + ".csv");
                zipout.putnextentry(zipentry);
                // 创建csv写入器
                outputstreamwriter writer = new outputstreamwriter(zipout, standardcharsets.utf_8);
                writer.write("\ufeff");
                csvwriter csvwriter = csvutil.getwriter(writer);
                // 写入数据
                for (t data : datalist) {
                    string[] row = converttorow(data);
                    csvwriter.write(row);
                }
                csvwriter.flush(); // 确保所有数据写入输出流
                zipout.closeentry(); // 关闭当前条目
            }
        }
    }
    private static <t> string[] converttorow(t data) {
        field[] fields = data.getclass().getdeclaredfields();
        string[] row = new string[fields.length];
        try {
            for (int i = 0; i < fields.length; i++) {
                // 设置字段可访问
                fields[i].setaccessible(true);
                // 获取字段值
                object value = fields[i].get(data);
                // 转换为字符串,处理null
                row[i] = value != null ? value.tostring() : "";
            }
        } catch (illegalaccessexception e) {
            log.error("数据转换异常:{}",e.getmessage());
        }
        return row;
    }
}

3. 接口

@slf4j
@restcontroller
public class regionexportcontroller {
    @sneakythrows
    @postmapping("/api/v1/regionexport")
    public void exportvehicleresult(httpservletresponse response) {
        // 模拟数据
        list<regionimportdto> list = regionimportdto.exportdata();
        csvutils.export(response, "区域结果表", list);
    }
    @sneakythrows
    @postmapping("/api/v1/regionexportzip")
    public void exportzipvehicleresult(httpservletresponse response) {
        // 模拟数据
        list<regionimportdto> list = regionimportdto.exportdata();
        map<integer, list<regionimportdto>> listmap = list.stream().collect(collectors.groupingby(regionimportdto::gettype));
        csvutils.exportzip(response, listmap);
    }
}

到此这篇关于springboot集成hutool导出csv的方法的文章就介绍到这了,更多相关springboot hutool导出csv内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com