Spring Boot导出csv文件工具类简介说明

书欣 SpringBoot 发布时间:2022-08-03 16:05:59 阅读数:5459 1
下文笔者讲述SpringBoot中导出csv工具类的方法分享,如下所示
我们都知道csv格式是excel的简易版本,而且体积非常小,我们可以使用导csv格式的方式,
实现导出excel的效果,下例是作者开发的导出csv的工具类,如下所示
实现思路:
    1.定义表头格式
	2.使用for循环list中的数据
	  依次写入csv的文件中
例:
1. 导出文件工具类
@Slf4j
public class ExportUtil {

    /** CSV文件列分隔符 */
    private static final String CSV_COLUMN_SEPARATOR = ",";

    /** CSV文件列分隔符 */
    private static final String CSV_RN = "\r\n";

    /**
     *
     * @param dataList 集合数据
     * @param colNames 表头部数据
     * @param mapKey 查找的对应数据
     * @param os 返回结果
     */
    public static boolean doExport(List<Map<String, Object>> dataList, String colNames, String mapKey, OutputStream os) {
        try {
            StringBuffer buf = new StringBuffer();

            String[] colNamesArr = null;
            String[] mapKeyArr = null;

            colNamesArr = colNames.split(",");
            mapKeyArr = mapKey.split(",");

            // 完成数据csv文件的封装
            // 输出列头
            for (String aColNamesArr : colNamesArr) {
                buf.append(aColNamesArr).append(CSV_COLUMN_SEPARATOR);
            }
            buf.append(CSV_RN);

            if (null != dataList) { // 输出数据
                for (Map<String, Object> aDataList : dataList) {
                    for (String aMapKeyArr : mapKeyArr) {
                        buf.append(aDataList.get(aMapKeyArr)).append(CSV_COLUMN_SEPARATOR);
                    }
                    buf.append(CSV_RN);
                }
            }
            // 写出响应
            os.write(buf.toString().getBytes("GBK"));
            os.flush();
            return true;
        } catch (Exception e) {
            log.error("doExport错误...", e);
        }
        return false;
    }

    /**
     * setHeader
     */
    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));
    }

}
例:
Controller测试

@RestController
@RequestMapping("/test")
@Slf4j
public class DownloadFileController {

    @Autowired
    private SysLogService sysLogService;

    @GetMapping("/file")
    public Result download(HttpServletResponse response) {
        List<Map<String, Object>> dataList = null;

        List<SysLog> logList = sysLogService.findAll();// 查询到要导出的信息

        if (logList.size() == 0) {
            ResultUtil.failure("无数据导出");
        }
        String sTitle = "id,用户名,用户年龄,创建时间";
        String fName = "log_";
        String mapKey = "id,username,operation,method,createDate";
        dataList = new ArrayList<>();
        Map<String, Object> map = null;
        for (SysLog order : logList) {
            map = new HashMap<>();

            map.put("id", order.getId());
            map.put("username", order.getUsername());
            map.put("operation", order.getOperation());
            map.put("method", order.getMethod());
            map.put("createDate", DateFormatUtils.format(order.getCreateDate(), "yyyy/MM/dd HH:mm"));

            dataList.add(map);
        }
        try (final OutputStream os = response.getOutputStream()) {
            ExportUtil.responseSetProperties(fName, response);
            ExportUtil.doExport(dataList, sTitle, mapKey, os);
            return null;
        } catch (Exception e) {
            log.error("生成csv文件失败", e);
        }
        return ResultUtil.failure("数据导出出错");
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202208/4130.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者