java csv 文件导出

工具类

package robot.util;

import org.apache.commons.collections4.CollectionUtils;

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

/**
 * csv 导出工具类
 * @author gdd
 */
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("UTF-8"));
        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=" + fn);
    }
}

controller

   @ApiOperation("csv 导出")
    @RequestMapping(value = "export")
    public void exportCsv(HttpServletResponse response, @RequestParam(value = "gameroom", required = false) String gameroom,
                            @RequestParam(value = "gamecode", required = false) String gamecode,
                            @RequestParam(value = "currency", required = false) String currency
    ) {
        // 构造导出数据结构
        // 设置表头
        String titles = "currency,game,room,triggerTime,percentage";
        // 设置每列字段
        String keys = "currency,game,room,triggerTime,percentage";
        // 构造导出数据
        List<Map<String, Object>> datas = new ArrayList<>();
        Map<String, Object> mapInfo;
        RobotOffline task = new RobotOffline();
        logger.info("offline  gameroom:{}", new Object[]{gameroom});
        logger.info("offline  gamecode:{}", new Object[]{gamecode});
        logger.info("offline  currency:{}", new Object[]{currency});
        task.setGamecode(gamecode);
        task.setCurrency(currency);
        task.setGameroom(gameroom);
        try {
            List<RobotOffline> taskList = offlineService.queryList(task);
            logger.info("offline  taskList:{}", new Object[]{JackSonUtil.toJSon(taskList)});
            if (!CollectionUtils.isEmpty(taskList)) {

                for (RobotOffline offline : taskList) {
                    logger.info("offline  game:{},romm:{}currenct:{} ", new Object[]{offline.getGamecode(), offline.getGameroom(), offline.getCurrency()});
                    mapInfo = new HashMap<>(8);
                    mapInfo.put("currency", offline.getCurrency());
                    mapInfo.put("game", offline.getGamecode());
                    mapInfo.put("room", offline.getGameroom());
                    mapInfo.put("triggerTime", offline.getTriggerTime());
                    mapInfo.put("percentage", offline.getPercentage());
                    datas.add(mapInfo);
                }
            }
            // 设置导出文件前缀
            String fName = "robotOfflineSetting_";
            // 文件导出
            OutputStream os = response.getOutputStream();
            CsvExportUtil.responseSetProperties(fName, response);
            CsvExportUtil.doExport(datas, titles, keys, os);
        } catch (Exception e) {
            logger.error("导出失败" + e.getMessage(), e);
        }

    }

html 页面

									<button id="export" class="btn float-right btn-info"
											data-toggle="tooltip" title="导出" type="button">
										<i class="fas fa-cloud-download-alt"></i>
									</button>
function download() {
    let sc = $("#q_currency option:selected").text();
    let gc = $("#q_gameCode").val();
    let gm = $("#q_gameRoom").val();

    let urlString=window.location.href;
    urlString=urlString.substring(0,  urlString.indexOf("/page")).trim();
    var url = urlString+"/offline/export?currency=" + sc + "&gamecode=" + gc + "&gameroom=" + gm;
    window.open(url);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值