java实现接口导出csv文件

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文件的更多相关文章
- java utf8字符 导出csv 文件的乱码问题。
		在输出的格式为UTF-8的格式,但是打开CSV文件一直为乱码,后来参考了这里的代码,搞定了乱码问题,原文请参考:http://hbase.iteye.com/blog/1172200 private ... 
- Java - 问题集 - 导出csv文件中文乱码
		微软的excel文件需要通过文件头的bom来识别编码,所以写文件时,需要先写入bom头. FileOutputStream fos = new FileOutputStream(new File(&q ... 
- Spring Boot下的一种导出CSV文件的代码框架
		1.前言  CSV,逗号分隔值(Comma-Separated Values),即为逗号分隔的文本文件.如果值中含有逗号.换行符.制表符(Tab).单引号及双引号,则需要用双引号括起来:如果值中包含 ... 
- java导入、导出Excel文件
		一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ... 
- 导出csv文件示例
		导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ... 
- mysql SQLyog导入导出csv文件
		1.选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作为 --> 选择cvs --> 选择下面的“更改” --> 字段 --> 变量长度 ... 
- PHP 读取/导出 CSV文件
		工作中经常会有遇到导入/导出的需求,下面是常用的方法.读取CSV文件,可以分页读取,设置读取行数,起始行数即可.导出CSV文件,用两种方法进行实现. /** * 读取CSV文件 * @param st ... 
- Web 端 js 导出csv文件(使用a标签)
		前言 导出文件,使用最多的方式还是服务器端来处理.比如jsp 中使用response 的方式. 但是,有时候可能就想使用web 前端是否也可以把页面上的内容导出来呢? 比如说,导出页面的一个表格. 这 ... 
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
		Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ... 
随机推荐
- How To Configure NFS Client on CentOS 8 / RHEL 8
			https://computingforgeeks.com/configure-nfs-client-on-centos-rhel/ 
- Java之集合
			前言: 在写程序当中,集合会经常使用,今天听了马老师的课,写一些自己的总结 正文: 集合最重要的就是一个图,一个类,三个知识点,六个接口 说到图就是上面的图,这个图可以帮我们理解这些接口的继承关系 1 ... 
- UVA - 1152 4 Values whose Sum is 0(中途相遇法)
			题意:从四个集合各选一个数,使和等于0,问有多少种选法. 分析:求出来所有ai + bi,在里面找所有等于ci + di的个数. #pragma comment(linker, "/STAC ... 
- 01-JAVA语言基础——课后动手动脑
			1.一个java类文件中真的只能有一个公有类吗? 请使用Eclipse或javac检测一下以下代码,有错吗? public class Test{ public static void main ... 
- 如何通过 Python 和 OpenCV 实现目标数量监控?
			今天我们将利用python+OpenCV实现对视频中物体数量的监控,达到视频监控的效果,比如洗煤厂的监控水龙头的水柱颜色,当水柱为黑色的超过了一半,那么将说明过滤网发生了故障.当然不仅如此,我们看的是 ... 
- 一百一十、SAP的OO-ALV之四,定义屏幕相关变量和逻辑流
			一.代码如下,定义相关变量 二.来带屏幕页面,双击STATUS_9000和USER_COMMAND_9000,自动生成相应代码 三.点击是 四.会自动生产关联的Includ文件 五.我们自己创建一个M ... 
- ZOJ 3795 Grouping 强连通分量-tarjan
			一开始我还天真的一遍DFS求出最长链以为就可以了 不过发现存在有向环,即强连通分量SCC,有向环里的每个点都是可比的,都要分别给个集合才行,最后应该把这些强连通分量缩成一个点,最后保证图里是 有向无环 ... 
- 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 ... 
- VS Code使用.vue的v-for方法提示错误的解决办法
			1.在使用v-for的时候在后面跟上:key="key" <div v-for="(value, key) in [1,2,3]" :key=" ... 
- VUE注册全局组件和局部组件
			全局组件 第一步:在components文件夹下建立一个子文件Users.vue <template> <div class="users"> {{msg} ... 
