Simple, Interesting | 简单,有趣
业务介绍
项目要求从数据库中查询出相关数据后,通过表格展示给用户,如果用户需要,可以点击导出按钮,导出数据为csv格式。 </br>开发环境:JDK7、Tomcat7、SpringBoot
网页中的表格<br>

下载后的表格<br>

业务流程
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