java实现接口导出csv文件

<p align="center"> <img src="http://qiniu.tomxin.cn/blog/180920/5BkJdmB10j.png?imageslim" alt="Material Render Phone"> </p> <h1 align="center"><a href="http://tomxin.cn" target="\_blank">Tomxin7 </a></h1>

Simple, Interesting | 简单,有趣

业务介绍

项目要求从数据库中查询出相关数据后,通过表格展示给用户,如果用户需要,可以点击导出按钮,导出数据为csv格式。 </br>开发环境:JDK7、Tomcat7、SpringBoot

网页中的表格<br>

image

下载后的表格<br>

image

业务流程

1、数据库查询数据<br>2、创建临时csv文件<br>3、输出csv流文件,提供给浏览器下载<br>4、删除临时文件

完整代码

测试地址:127.0.0.1:8080/export

1pom文件添加以下依赖 2 <dependency> 3 <groupId>net.sourceforge.javacsv</groupId> 4 <artifactId>javacsv</artifactId> 5 <version>2.0</version> 6 </dependency> 7 8 9 /** 10 * 导出行为执行明细记录 11 * @return 12 */ 13 @RequestMapping(value = "/export", method = RequestMethod.GET) 14 public void exportRecord(HttpServletResponse response){ 15 16 // 创建对象,如果是实际业务请从数据库取出数据 17 ArrayList<ActionDetailsDto> datas = new ArrayList(); 18 ActionDetailsDto actionDetailsDto = new ActionDetailsDto(); 19 actionDetailsDto.setContent("您好,请确认你7月份的绩效系统"); 20 actionDetailsDto.setObjectName("tomxin"); 21 actionDetailsDto.setObjectId(123456L); 22 datas.add(actionDetailsDto); 23 24 try { 25 //创建临时csv文件 26 File tempFile = createTempFile(datas); 27 //输出csv流文件,提供给浏览器下载 28 outCsvStream(response, tempFile); 29 //删除临时文件 30 deleteFile(tempFile); 31 32 } catch (IOException e) { 33 System.out.println("导出失败"); 34 } 35 } 36 37 /** 38 * 创建临时的csv文件 39 * @return 40 * @throws IOException 41 */ 42 public File createTempFile(List<ActionDetails> datas) throws IOException { 43 File tempFile = File.createTempFile("vehicle", ".csv"); 44 CsvWriter csvWriter = new CsvWriter(tempFile.getCanonicalPath(), ',', Charset.forName("UTF-8")); 45 // 写表头 46 String[] headers = {"行为明细", "执行对象","触发时间","状态"}; 47 csvWriter.writeRecord(headers); 48 for (ActionDetails data : datas) { 49 //这里如果数据不是String类型,请进行转换 50 csvWriter.write(data.getContent()); 51 csvWriter.write(data.getObjectName()); 52 csvWriter.write(data.getCreateTime()); 53 csvWriter.write(data.getStatus()); 54 csvWriter.endRecord(); 55 } 56 csvWriter.close(); 57 return tempFile; 58 } 59 60 /** 61 * 写入csv结束,写出流 62 */ 63 public void outCsvStream(HttpServletResponse response,File tempFile) throws IOException { 64 java.io.OutputStream out = response.getOutputStream(); 65 byte[] b = new byte[10240]; 66 java.io.File fileLoad = new java.io.File(tempFile.getCanonicalPath()); 67 response.reset(); 68 response.setContentType("application/csv"); 69 response.setHeader("content-disposition", "attachment; filename=export.csv"); 70 java.io.FileInputStream in = new java.io.FileInputStream(fileLoad); 71 int n; 72 //为了保证excel打开csv不出现中文乱码 73 out.write(new byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF }); 74 while ((n = in.read(b)) != -1) { 75 //每次写入out1024字节 76 out.write(b, 0, n); 77 } 78 in.close(); 79 out.close(); 80 } 81 82 /** 83 * 删除单个文件 84 * 85 * @return 单个文件删除成功返回true,否则返回false 86 */ 87 public static boolean deleteFile( File file) { 88 // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除 89 if (file.exists() && file.isFile()) { 90 if (file.delete()) { 91 return true; 92 } else { 93 return false; 94 } 95 } else { 96 return false; 97 } 98 } 99

部分参考:https://blog.csdn.net/qq_32447321/article/details/75025824

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

java实现接口导出csv文件 - HelloWorld