写点什么

java 实现数据导出

作者:卢卡多多
  • 2021 年 12 月 13 日
  • 本文字数:1486 字

    阅读完需:约 5 分钟

java实现数据导出

在数据迁移的过程中,我们常见的会将特定的数据导出,比如个人的额工资信息,请求信息会通过一个 Excel 表格导出,进行汇总统计, 也可以当做一个材料,这个比较简单也有现成 的 POI 实现,今天我来分享一个对于特定格式的数据, 比如我们现在需要将数据可以更好的展示出来,我们要求用 JSON 格式的数据展示,将我们特定的数据,直接导出至 JSON 文件,进行数据的展示。


JSON 格式,对于研发人员,导入数据或者迁移数据是比较快好的,可以特定的发现数据的问题,类似于一个模版,这个模版就是 JSON 数据模版。


1.如何实现将数据导出到 JSON 文件中?


  1. 数据标准化,将数据变成一个对象,可能是个集合的形式,标准化数据

  2. 将数据确定好要导出的模版,

  3. 实现将数据转化成 JSON 数据,然后生成导出文件,并将数据写入其中

  4. 将文件下载到客户端,通过流处理


2.导出 JSON 文件的代码实战:


集中于将数据写入文件的代码,其他的属于业务性质的,可以自己补充

   public Result exportProductData(@RequestBody ProductParam exportProductParam, HttpServletResponse response) {
//当前数据写入文件 boolean file = createFile(JSONUtil.toJsonStr(productDate), response); if (file) { return Result.success("产品数据导出成功"); } else { return Result.failed("产品数据异常,导出失败"); } }
复制代码


其中导入文件的代码 createFile 方法


 private boolean createFile(String jsonString, HttpServletResponse response) {        boolean flag = true;        try {            JsonFormatTool.formatJson(jsonString);            ByteArrayOutputStream byteStream = new ByteArrayOutputStream();            IOUtils.write(jsonString, byteStream, StandardCharsets.UTF_8);            byte[] buffer = byteStream.toByteArray();            InputStream is = new ByteArrayInputStream(buffer);            // 设置response参数,可以打开下载页面            response.reset();            String filename = "productTestDate.json";            response.setContentType("application/octet-stream;charset=UTF-8");            String fileName = new String(filename.getBytes("gb2312"), "iso8859-1");            response.setHeader("Content-disposition", "attachment;filename=" + fileName);            response.setContentLength(buffer.length);            ServletOutputStream outputStream = response.getOutputStream();            BufferedInputStream bis = new BufferedInputStream(is);            BufferedOutputStream bos = new BufferedOutputStream(outputStream);            byte[] buff = new byte[8192];            int bytesRead;            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {                bos.write(buff, 0, bytesRead);            }            bis.close();            bos.close();            outputStream.flush();            outputStream.close();
} catch (Exception e) { log.error(e.getMessage(), e); flag = false; log.error("产品导出数据失败"); }
return flag; }
复制代码


卢卡寄语


其实这里面主要是将 数据如何合法的写入 json 文件中, 将文件生成到客户端,进行下载,因为我返回的是一个 response 流,前端可以拿到流之后 a 标签直接下载,亲测是可用的,

加油,你可以自己尝试一下

发布于: 2 小时前阅读数: 8
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
java实现数据导出