Tomxin7

Simple, Interesting | 简单,有趣

业务介绍

项目要求从数据库中查询出相关数据后,通过表格展示给用户,如果用户需要,可以点击导出按钮,导出数据为csv格式。


开发环境:JDK7、Tomcat7、SpringBoot

网页中的表格

下载后的表格

业务流程

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

完整代码

测试地址:127.0.0.1:8080/export

pom文件添加以下依赖
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
       /**
* 导出行为执行明细记录
* @return
*/
@RequestMapping(value = "/export", method = RequestMethod.GET)
public void exportRecord(HttpServletResponse response){ // 创建对象,如果是实际业务请从数据库取出数据
ArrayList<ActionDetailsDto> datas = new ArrayList();
ActionDetailsDto actionDetailsDto = new ActionDetailsDto();
actionDetailsDto.setContent("您好,请确认你7月份的绩效系统");
actionDetailsDto.setObjectName("tomxin");
actionDetailsDto.setObjectId(123456L);
datas.add(actionDetailsDto); try {
//创建临时csv文件
File tempFile = createTempFile(datas);
//输出csv流文件,提供给浏览器下载
outCsvStream(response, tempFile);
//删除临时文件
deleteFile(tempFile); } catch (IOException e) {
System.out.println("导出失败");
}
} /**
* 创建临时的csv文件
* @return
* @throws IOException
*/
public File createTempFile(List<ActionDetails> datas) throws IOException {
File tempFile = File.createTempFile("vehicle", ".csv");
CsvWriter csvWriter = new CsvWriter(tempFile.getCanonicalPath(), ',', Charset.forName("UTF-8"));
// 写表头
String[] headers = {"行为明细", "执行对象","触发时间","状态"};
csvWriter.writeRecord(headers);
for (ActionDetails data : datas) {
//这里如果数据不是String类型,请进行转换
csvWriter.write(data.getContent());
csvWriter.write(data.getObjectName());
csvWriter.write(data.getCreateTime());
csvWriter.write(data.getStatus());
csvWriter.endRecord();
}
csvWriter.close();
return tempFile;
} /**
* 写入csv结束,写出流
*/
public void outCsvStream(HttpServletResponse response,File tempFile) throws IOException {
java.io.OutputStream out = response.getOutputStream();
byte[] b = new byte[10240];
java.io.File fileLoad = new java.io.File(tempFile.getCanonicalPath());
response.reset();
response.setContentType("application/csv");
response.setHeader("content-disposition", "attachment; filename=export.csv");
java.io.FileInputStream in = new java.io.FileInputStream(fileLoad);
int n;
//为了保证excel打开csv不出现中文乱码
out.write(new byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });
while ((n = in.read(b)) != -1) {
//每次写入out1024字节
out.write(b, 0, n);
}
in.close();
out.close();
} /**
* 删除单个文件
*
* @return 单个文件删除成功返回true,否则返回false
*/
public static boolean deleteFile( File file) {
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
return true;
} else {
return false;
}
} else {
return false;
}
}

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

java实现接口导出csv文件的更多相关文章

  1. java utf8字符 导出csv 文件的乱码问题。

    在输出的格式为UTF-8的格式,但是打开CSV文件一直为乱码,后来参考了这里的代码,搞定了乱码问题,原文请参考:http://hbase.iteye.com/blog/1172200 private ...

  2. Java - 问题集 - 导出csv文件中文乱码

    微软的excel文件需要通过文件头的bom来识别编码,所以写文件时,需要先写入bom头. FileOutputStream fos = new FileOutputStream(new File(&q ...

  3. Spring Boot下的一种导出CSV文件的代码框架

    1.前言 ​ CSV,逗号分隔值(Comma-Separated Values),即为逗号分隔的文本文件.如果值中含有逗号.换行符.制表符(Tab).单引号及双引号,则需要用双引号括起来:如果值中包含 ...

  4. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  5. 导出csv文件示例

    导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ...

  6. mysql SQLyog导入导出csv文件

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

  7. PHP 读取/导出 CSV文件

    工作中经常会有遇到导入/导出的需求,下面是常用的方法.读取CSV文件,可以分页读取,设置读取行数,起始行数即可.导出CSV文件,用两种方法进行实现. /** * 读取CSV文件 * @param st ...

  8. Web 端 js 导出csv文件(使用a标签)

    前言 导出文件,使用最多的方式还是服务器端来处理.比如jsp 中使用response 的方式. 但是,有时候可能就想使用web 前端是否也可以把页面上的内容导出来呢? 比如说,导出页面的一个表格. 这 ...

  9. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

随机推荐

  1. How To Configure NFS Client on CentOS 8 / RHEL 8

    https://computingforgeeks.com/configure-nfs-client-on-centos-rhel/

  2. Java之集合

    前言: 在写程序当中,集合会经常使用,今天听了马老师的课,写一些自己的总结 正文: 集合最重要的就是一个图,一个类,三个知识点,六个接口 说到图就是上面的图,这个图可以帮我们理解这些接口的继承关系 1 ...

  3. UVA - 1152 4 Values whose Sum is 0(中途相遇法)

    题意:从四个集合各选一个数,使和等于0,问有多少种选法. 分析:求出来所有ai + bi,在里面找所有等于ci + di的个数. #pragma comment(linker, "/STAC ...

  4. 01-JAVA语言基础——课后动手动脑

    1.一个java类文件中真的只能有一个公有类吗? 请使用Eclipse或javac检测一下以下代码,有错吗? public class Test{    public static void main ...

  5. 如何通过 Python 和 OpenCV 实现目标数量监控?

    今天我们将利用python+OpenCV实现对视频中物体数量的监控,达到视频监控的效果,比如洗煤厂的监控水龙头的水柱颜色,当水柱为黑色的超过了一半,那么将说明过滤网发生了故障.当然不仅如此,我们看的是 ...

  6. 一百一十、SAP的OO-ALV之四,定义屏幕相关变量和逻辑流

    一.代码如下,定义相关变量 二.来带屏幕页面,双击STATUS_9000和USER_COMMAND_9000,自动生成相应代码 三.点击是 四.会自动生产关联的Includ文件 五.我们自己创建一个M ...

  7. ZOJ 3795 Grouping 强连通分量-tarjan

    一开始我还天真的一遍DFS求出最长链以为就可以了 不过发现存在有向环,即强连通分量SCC,有向环里的每个点都是可比的,都要分别给个集合才行,最后应该把这些强连通分量缩成一个点,最后保证图里是 有向无环 ...

  8. E. Third-Party Software - 2 贪心----最小区间覆盖

    E. Third-Party Software - 2 time limit per test 2.0 s memory limit per test 256 MB input standard in ...

  9. VS Code使用.vue的v-for方法提示错误的解决办法

    1.在使用v-for的时候在后面跟上:key="key" <div v-for="(value, key) in [1,2,3]" :key=" ...

  10. VUE注册全局组件和局部组件

    全局组件 第一步:在components文件夹下建立一个子文件Users.vue <template> <div class="users"> {{msg} ...