为什么要用CSV?

CSV文件

1、CSV文件是一种用逗号分隔数值的文本文件,可以直接用Excel打开,也可以用于导入其他系统。

2、导出的文件为csv格式,请双击用Excel打开后请另存为excel文件。

3、如果打开后乱码,请使用记事本打开CSV文件,“文件”->“另存为”,编码方式选择ANSI,保存完毕后,用EXCEL打开这个文件就不会出现乱码的情况。

Xls文件

Xls文件是标准的Excel文件,可以直接用Excel打开,无乱码现象。数据量较大时,导出速度会很慢

实现代码工具类(方法一):

import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.util.*;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;/*** 导出CSV文件工具类*/
@Slf4j
public class ExportCsvUtil {/*** CSV文件列分隔符*/private static final String CSV_COLUMN_SEPARATOR = ",";/*** CSV文件行分隔符*/private static final String CSV_ROW_SEPARATOR = System.lineSeparator();/*** @param response 响应流* @param fileName 文件名称* @param titleColumn 标题列名称对象(如:name)* @param titleName 标题列名称对象描述(如:张三)* @param dataList  数据源*/public static void writeCSV(HttpServletResponse response, String fileName, String titleColumn[], String titleName[], List<?> dataList) {OutputStream out = null;try {// 保证线程安全StringBuffer buf = new StringBuffer();out = response.getOutputStream();String lastFileName = fileName + ".csv";response.setContentType("application/msexcel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(lastFileName, "UTF-8"));// 组装表头for (String title : titleName) {buf.append(title).append(CSV_COLUMN_SEPARATOR);}buf.append(CSV_ROW_SEPARATOR);//组装行数据for (int index = 0; index < dataList.size(); index++) {Object obj = dataList.get(index);Class clazz = obj.getClass();for (int columnIndex = 0; columnIndex < titleColumn.length; columnIndex++) {String title = titleColumn[columnIndex].trim();if (!"".equals(title)) {// 获取返回类型String UTitle = Character.toUpperCase(title.charAt(0)) + title.substring(1, title.length()); // 使其首字母大写;String methodName = "get" + UTitle;Method method = clazz.getDeclaredMethod(methodName);String returnType = method.getReturnType().getName();Object object = method.invoke(obj);//获取到数据String data = method.invoke(obj) == null ? "" : object.toString();//组装数据buf.append(data).append(CSV_COLUMN_SEPARATOR);}}buf.append(CSV_ROW_SEPARATOR);}//输出out.write(buf.toString().getBytes("UTF-8"));} catch (Exception e) {e.printStackTrace();} finally {if (out != null) {try {out.flush();out.close();} catch (IOException e) {log.error("导出写Csv异常");}}}}}

方法二:

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;/*** 导出CSV文件工具类*/
@Slf4j
public class ExportCsvUtil {/***   需要引入的jar包*     <dependency>*       <groupId>org.apache.commons</groupId>*       <artifactId>commons-csv</artifactId>*       <version>1.6</version>*     </dependency>*//*** @param response 响应流* @param fileName 文件名称* @param titleColumn 标题列名称对象(如:name)* @param titleName 标题列名称对象描述(如:张三)* @param dataList  数据源*/public static void writeCSV1(HttpServletResponse response, String fileName, String titleColumn[], String titleName[], List<?> dataList) {OutputStream out = null;try {out = response.getOutputStream();String lastFileName = fileName + ".csv";response.setContentType("application/msexcel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(lastFileName, "UTF-8"));OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");//追加BOM标识(bom这个可自行百度了解)osw.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));//写入标题CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(titleName);CSVPrinter csvPrinter = new CSVPrinter(osw, csvFormat);//组装行数据for (int index = 0; index < dataList.size(); index++) {Object obj = dataList.get(index);Class clazz = obj.getClass();String str[] = new String[titleColumn.length];for (int columnIndex = 0; columnIndex < titleColumn.length; columnIndex++) {String title = titleColumn[columnIndex].trim();if (!"".equals(title)) {// 获取返回类型String UTitle = Character.toUpperCase(title.charAt(0)) + title.substring(1); // 使其首字母大写;String methodName = "get" + UTitle;Method method = clazz.getDeclaredMethod(methodName);String returnType = method.getReturnType().getName();Object object = method.invoke(obj);//获取到数据String data = method.invoke(obj) == null ? "" : object.toString();if (Date.class.getName().equals(returnType)) {str[columnIndex]=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(object);} else {//组装数据str[columnIndex]=data;}}}//打印一行csvPrinter.printRecord(str);}csvPrinter.flush();csvPrinter.close();} catch (Exception e) {e.printStackTrace();} finally {if (out != null) {try {out.flush();out.close();} catch (IOException e) {log.error("导出Csv异常");}}}}}

测试对象:

@ApiModel("数据返回类")
@Data
public class NilometerDataResp {@ApiModelProperty(value = "水位(单位:cm)")private String waterLevel;@ApiModelProperty(value = "水位(单位:cm)")private Integer waterTemp;}
 @GetMapping("/export")@ApiOperation(value = "数据导出接口", notes = "数据导出接口")public void exportMyAlarmOfApp(HttpServletResponse response) {List<NilometerDataResp> exportList = new ArrayList<>();for (int i=1; i<6;i++){NilometerDataResp model = new NilometerDataResp();model.setWaterLevels("水位"+i);model.setWaterTemp(23+i);exportList.add(model);}DateFormat df1 = new SimpleDateFormat("yyyyMMddHHmmss");String fileName = "Test" + df1.format(new Date());String titleColumn[] = new String[]{"waterLevel", "waterTemp"};String titleName[] = new String[]{"水位", "水温"};//执行导出ExportCsvUtil.writeCSV(response, fileName, titleColumn, titleName, exportList);}

java导出CSV文件相关推荐

  1. Java 导出CSV文件及实现web下载CSV

    本文主要介绍Java 导出CSV文件到本地及实现web下载CSV. 1.Java 导出CSV文件到本地 csvWriter: package com.csvio;import java.io.Buff ...

  2. java导出csv文件_R语言数据导入与导出

    R语言数据导入与导出 整这么一个系列,还是因为学R语言时遇到过一个非常"小白友好"的网站"DataScience Made Simple".相信很多人搜到过这个 ...

  3. java导出csv文件乱码_记一次java生成csv文件乱码的解决过程 (GB2312编码)

    系统:win7 (格式:中文(简体,中国)) 工具:Eclipse (默认编码utf-8) 服务两个:[restful接口]  和 [服务*** server]. 场景:[服务*** server]多 ...

  4. java导出csv文件_java导出生成csv文件的方法

    本文实例为大家分享了java导出生成csv文件的具体代码,供大家参考,具体内容如下 首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分 ...

  5. java导出csv文件 为解决导出excel时每个单元格的限制(32767)

    此实现方法仅供参考 因为本人导出数据量不大所采取的方法 如数据量大,会到至内存溢出请知晓 在这还提下:导出时内容自己换行 只需在内容前尾各加双引号就行. 如图: 1.准备导出工具类 // An hig ...

  6. java导出csv文件使用Excel打开乱码问题

    写一个csv文件,发现使用 notpad++ 打开是没有问题的,但是使用 Excel 打开之后显示乱码 刚开始的代码是这样子的: ByteArrayOutputStream os = new Byte ...

  7. java 导出csv文件通过web下载

    所需maven<!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv --><dependen ...

  8. java大数据量导出csv文件并压缩

    java大数据量导出csv文件并压缩 java使用POI大数据量导出excel一般会存在以下几个问题: 一次从数据库查询出这么大数据,查询缓慢 查询数据量过大时会内存溢出 解决方案:分页查询数据,比如 ...

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

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

  10. Java导入导出CSV文件

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

最新文章

  1. EntityModelStudio系列教程5--EMLib框架之Eql
  2. 关于Spring的构造函数,init-method,和依赖注入的先后顺序
  3. boost::geometry模块多边形叠加示例
  4. 剑指 Offer 40-----50
  5. 花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)
  6. 选择排序java代码_JAVA简单选择排序算法原理及实现
  7. [保存]C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
  8. Illustrator 教程,如何在 Illustrator 中更改图稿颜色?
  9. 拓端tecdat|R语言有状态依赖强度的非线性、多变量跳跃扩散过程模型似然推断分析股票价格波动
  10. 关于Bitmapimage图片保存(png格式)
  11. 大学本科计算机专业的课程
  12. 获取cad注册表路径
  13. LED背光源的技术术语
  14. PHP怎么发送邮件?
  15. Bi-Direction attention flow for machine reading(原理篇)
  16. linux_FIFO命名管道-mkfifo函数-进程通信
  17. matlab和ccd相机通讯,串口通讯在CCD相机系统中的应用
  18. 注册公司经营范围还不知道怎么写?看这一篇就够了!
  19. 告别LiveServer,vscode微软官方的LivePreview来了
  20. python从DataFrame中删除列

热门文章

  1. 解决谷歌浏览器主页被毒霸网址恶意篡改问题
  2. C语言编程入门——浮点数
  3. Python人工智能学习路线(长篇干货)
  4. c语言中自动生成迷宫地图,C语言新案例-迷宫制作
  5. 山大计算机学院副院长屠长河,孟祥旭(山东大学教授,博士生导师)_百度百科...
  6. Apq.Threading.js
  7. linux修改无线网卡hwaddr,在Linux下改无线网卡的mac的地址
  8. 修改xshell的配色方案
  9. 红色警戒2地图编辑器研究
  10. Oracle (01)Oracle数据库的安装步骤.搭建上课所用的数据库环境.table (二维表).查看表结构.数据库中常用的数据类型