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);}}

springboot 导出CSV相关推荐

  1. DataSet导出CSV格式(ASP.NET,C#)

    DataSet导出CSV格式(ASP.NET,C#)   作者:Not MSN:notking@hotmail.com Email:nots@sohu.com   本文引用下面的 Microsoft ...

  2. mysql导出csv数据_mysql 导出 csv数据命令

    mysql 导出 csv数据命令 导出 select field1,field2,field3 from tablename into outfile '/home/output1.csv' fiel ...

  3. plsql developer导出csv乱码问题

    最近导出csv时出现乱码 问题 自己摸索找到两种解决办法 方法 1 导出csv格式文件 新建excel文件 比如 a.xls excel软件打开 选择菜单数据 -导入外部数据  unicode默认下一 ...

  4. java 导出csv 格式,java导出csv格式文件的方法

    这篇文章主要为大家详细介绍了java导出csv格式文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 imp ...

  5. Oracle 导出CSV、导出大数据

    第一步:创建导出CSV语句 --创建导出语句 CREATE OR REPLACE PROCEDURE SQL_TO_CSV --名称可以自定义(记住导出时使用) (P_QUERY IN VARCHAR ...

  6. Mysql 导入导出csv 中文乱码问题的解决方法

    导出csv: select t1.stid,t1.cateNodeId,t2.name,t1.name from (select p.stid,p.cateNodeId,r.name from Res ...

  7. Java导入导出CSV文件

    场景:导入导出CSV文件 1.CSVUtils类 package com.delta.gddx;import java.io.BufferedReader; import java.io.Buffer ...

  8. MongoDB导出csv格式数据

    第一步: 在cmd中进入mongodb的安装目录下的bin文件夹 C:\Users\zzz>cd C:\Program Files\MongoDB\Server\4.0\bin 第二步: 从Mo ...

  9. mysql SQLyog导入导出csv文件

    1.选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作为 --> 选择cvs --> 选择下面的"更改" --> 字段 - ...

最新文章

  1. 什么是未定义的引用/未解决的外部符号错误,如何解决?
  2. Spring之LoadTimeWeaver——一个需求引发的思考---转
  3. %matplotlib inline 的作用
  4. 求职特训营火热来袭 阿里大咖教你制作专业简历
  5. Centos7 使用Docker 部署Tomca+mysql+调试联通_02
  6. bzoj1293 [SCOI2009]生日礼物 单调队列
  7. telerik:RadTreeView树形菜单鼠标放上去展开菜单
  8. RHEL 4 安装单实例oracle 10g
  9. 三种找回丢失iPhone的方法,来自苹果手机找回网
  10. Html 返回顶部代码及注释说明
  11. 信道编码-RS-CRC-交织(一)
  12. 医院信息系统源码 HIS源码
  13. 回首2013,一个屌丝码农的感慨
  14. hp台式计算机硬盘如何取出,惠普台式机不读硬盘怎么办
  15. html游戏手机怎么打开方式,aspx文件怎么打开手机(aspx游戏怎么玩)
  16. 江苏省重点软件企业信息汇总(排名不分先后)
  17. win10支持8t 硬盘_正版Windows 10免费拿解决问题之“硬盘S.A.M.R.T或MBR异常”
  18. 线性系统的校正之串联校正
  19. 有限元matlab_“ANSYS APDL有限元高级分析技术与二次开发”研修班
  20. ffmpeg的avformat_find_stream_info分析过程(十一)

热门文章

  1. 关于fontawesome-webfont93e3.ttf加载不到的解决办法
  2. 安全防御--IPsec VPN点到点的实验
  3. Flutter 页面无缘无故执行build的解决办法
  4. 2041. 【2016.5.21普及组模拟】魔方工厂
  5. 达梦数据库服务器与文件内数据,达梦数据库使用
  6. PS网页设计教程II——在Photoshop中创建健康及营养或健身的网站
  7. 初中数学9大经典解题法!
  8. c语言实验报告周信东,周信东主编最新版c语言程序设计基础实验一实验报告
  9. PHP上传excel,处理表格数据,并利用ajax提交保存数据
  10. could not be translated. Either rewrite the query in a form that can be translated