java实现导出数据为zip压缩文件

 更新时间:2023年11月07日 14:39:09   作者:杞人何忧  
这篇文章主要为大家详细介绍了java如何实现导出数据为zip压缩文件,并且解压后为json文件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

1,前端只要将要导出的数据的ids传回后端就行了

比如

    handleExportApp(row) {
      const ids = row ? [row.id] : this.checkedRows.map(v => v.id); 
      //exportApp为后端导出接口
      exportApp(ids.join(","));
    },

2.后端接口

    public void exportApp(String ids, HttpServletResponse response) {
        if (StringUtils.isBlank(ids)) {
            throw new BusinessException("参数不能为空");
        }
        List<String> idsList = Arrays.asList(ids.split(","));
        List<App> list = appService.findAppAllListByIds(idsList);
        //创建HttpServerResponse的输出流
        OutputStream out = null;
        try {
            out = response.getOutputStream();
            BufferedInputStream bis;
            File file = new File("应用数据包.zip");
            //通过ZipOutputStream定义要写入的对象
            ZipOutputStream zos = null;
            zos = new ZipOutputStream(new FileOutputStream(file));
            writeZos(list, zos);
            zos.close();
            //定义返回类型
            response.setContentType("text/html; charset=UTF-8");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode("应用数据包.zip", "UTF-8"))));
            bis = new BufferedInputStream(new FileInputStream(file));
            //定义byte,长度就是要转成zip文件的byte长度,避免浪费资源
            byte[] buffer = new byte[bis.available()];
            bis.read(buffer);
            out.flush();
            out.write(buffer);
            file.delete();
        } catch (IOException e) {
            logger.error("应用数据包流写入异常{}", e.getMessage());
            throw new BusinessException("系统异常");
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
     }



    public void writeZos(List<App> list, ZipOutputStream zos) {
        list.forEach(a -> {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            try {
                byteArrayOutputStream.write(JSONUtil.toJsonStr(a).getBytes());
                zos.putNextEntry(new ZipEntry(a.getName() + ".json"));
                byte[] excelStream = byteArrayOutputStream.toByteArray();
                zos.write(excelStream);
                zos.closeEntry();
            } catch (IOException e) {
                logger.error("应用数据包流写入异常{}", e.getMessage());
                throw new BusinessException("系统异常");
            }
        });
    }

拓展

如果只是导出json文件,不需要压缩包的话

前端

    handleExportApp(row) {
      this.ids = row ? [row.id] : this.checkedRows.map(v => v.id);
      this.loading = true;
      this.exportData(this.ids);
    },

    exportData(ids) {
      if (ids.length > 0) {
        const currentId = ids.shift(); // 取出数组中的第一个id
        simulateClick(exportApp(currentId)); // 导出单个数据
        setTimeout(() => {
          this.exportData(ids); // 递归调用导出函数,继续下一个数据
        }, 10000); // 设置递归的间隔时间,以免处理过多数据造成性能问题
      }
    },

后端

        if (StringUtils.isBlank(ids)) {
            throw new BusinessException("参数不能为空");
        }
        List<String> idsList = Arrays.asList(ids.split(","));

        for (String id : idsList) {
            App app = appService.getById(id);

            // 忽略未找到的应用程序
            if (app == null) {
                continue;
            }
            ObjectMapper objectMapper = new ObjectMapper();
            try {
            	//把对象转成json字符串
                String jsonString = objectMapper.writeValueAsString(app);

                // 设置响应头部信息
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode("应用_" + app.getName() + ".json", "UTF-8"))));

                // 获取输出流并写入JSON字符串
                PrintWriter writer = response.getWriter();
                writer.write(jsonString);
                writer.flush();
                writer.close();
            } catch (IOException e) {
                logger.error("导出应用数据异常:{}", e.getMessage());
                throw new BusinessException("系统异常");
            }
        }

但是这样有一个不好的地方,就是前端用户体验感不是很好,需要等待前端一个个文件导出。

到此这篇关于java实现导出数据为zip压缩文件的文章就介绍到这了,更多相关java数据导出为zip内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决idea报错 Connot resolve column 的问题

    解决idea报错 Connot resolve column 的问题

    这篇文章主要介绍了解决idea报错 Connot resolve column 的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java String方法获取字符出现次数及字符最大相同部分示例

    Java String方法获取字符出现次数及字符最大相同部分示例

    这篇文章主要介绍了Java String方法获取字符出现次数及字符最大相同部分,涉及java字符串的遍历、比较、计算等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • java Semaphore共享锁实现原理解析

    java Semaphore共享锁实现原理解析

    这篇文章主要为大家介绍了Semaphore共享锁实现原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 基于mybatis进行批量更新两种方法

    基于mybatis进行批量更新两种方法

    这篇文章主要给大家介绍了关于如何基于mybatis进行批量更新的两种方法,批量更新的使用,mybatis中批量更新有很多种方法,可以把数据一条条更新,也可以传入一个数据集一次性更新,需要的朋友可以参考下
    2023-08-08
  • springboot访问404问题的解决办法

    springboot访问404问题的解决办法

    工作中遇到url404问题,解决问题的进程比较崎岖,写篇文章记录,下面这篇文章主要给大家介绍了关于springboot访问404问题的解决办法,文中通过图文介绍的非常详细,要的朋友可以参考下
    2023-03-03
  • java实现图片用Excel画出来

    java实现图片用Excel画出来

    这篇文章主要为大家详细介绍了java实现图片用Excel画出来,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Java list乱序的实现三种方法

    Java list乱序的实现三种方法

    本文主要介绍了Java list乱序的实现三种方法,包含Collections.shuffle()方法,random和Stream API这三种,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 图解Java经典算法冒泡排序的原理与实现

    图解Java经典算法冒泡排序的原理与实现

    冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序
    2022-09-09
  • java如何实现字符串中的字母排序

    java如何实现字符串中的字母排序

    这篇文章主要介绍了java如何实现字符串中的字母排序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 关于HashMap 并发时会引起死循环的问题解析

    关于HashMap 并发时会引起死循环的问题解析

    JDK1.8之前采用头插,即在链表结构上每次都把数据放在链表头部。JDK1.8采用尾插方法,很多朋友在学习Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时不知道究其原因,今天小编通过本文给大家介绍下HashMap 并发死循环问题,一起看看吧
    2021-05-05

最新评论