zoukankan      html  css  js  c++  java
  • java实现接口导出csv文件

    Material Render Phone

    Tomxin7

    Simple, Interesting | 简单,有趣

    业务介绍

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

    开发环境:JDK7、Tomcat7、SpringBoot

    网页中的表格

    image

    下载后的表格

    image

    业务流程

    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

  • 相关阅读:
    “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案
    深入浅出 eBPF 安全项目 Tracee
    Unity3d开发的知名大型游戏案例
    Unity 3D 拥有强大的编辑界面
    Unity 3D物理引擎详解
    Unity 3D图形用户界面及常用控件
    Unity 3D的视图与相应的基础操作方法
    Unity Technologies 公司开发的三维游戏制作引擎——Unity 3D
    重学计算机
    windows cmd用户操作,添加,设备管理员组,允许修改密码
  • 原文地址:https://www.cnblogs.com/tomxin7/p/9680826.html
Copyright © 2011-2022 走看看