Java 从网络地址读取压缩包文件解析excel

 从网络地址读取压缩包文件解析excel,结合easyExcel 导入模板的逻辑处理数据存储

注意:得到文件后需要判断是否有缓存文件,不然会抛出文件类型错误

try {
            URL url = new URL(taskInfo.getListFileUrl());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //设置超时间为3秒
            conn.setConnectTimeout(3 * 1000);
            //得到输入流
            ZipInputStream zipStream = new ZipInputStream(conn.getInputStream(), Charset.forName("utf-8"));
            ZipEntry zipEntry ;
            // 循环读取 ZIP 文件中的每一个子文件,若文件不为空且文件名为我们需要的那个("测试.xlsx"),则开始解析
            while ((zipEntry  = zipStream.getNextEntry()) != null) {
                     // 这里主要是跳过隐藏文件
                    if (zipEntry.getName().startsWith("_")) {
                        continue;
                    }
                //判断是否是excel文件
                if(zipEntry.getName().endsWith(".xlsx") || zipEntry.getName().endsWith(".xls")){
                    // 逐字节读取 ZipInputStream 文件,并将结果存储至一个字节数组缓冲区(ByteArrayOutputStream)中
                    byte[] buffer = new byte[1024];
                    int len;
                    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
                    while ((len = zipStream.read(buffer)) != -1) {
                        byteStream.write(buffer, 0, len);
                    }
                    // 创建 Excel 解析器对象,TaskDistributionZipRepresentation是 easyExcel的导入模板
                    ExcelAnalysisEventListener<TaskDistributionZipRepresentation> analysisEventListener =
                            new ExcelAnalysisEventListener<>((representations -> {
                                getLogger().info("开始存储压缩包文件的数据到数据库,当前共计 {} 条发放清单。", representations.size());
                                List<TaskDistribution> taskDistributions = new ArrayList<>();
                                 //循环读取excel数据
                                for (TaskDistributionZipRepresentation representation : representations) {         
                                    //具体业务处理逻辑
                                }
                                taskDistributionRepository.saveBatch(taskDistributions);
                                getLogger().info("存储压缩文件的数据到数据库成功,当前共计 {} 条发放清单。", representations.size());
                            }));
                    // 将之前的 ByteArrayOutputStream 对象转化为 byte数组,然后使用 EasyExcel 进行解析
                    ExcelReader excelReader = EasyExcel.read(new ByteArrayInputStream(byteStream.toByteArray()), TaskDistributionZipRepresentation.class, analysisEventListener).build();
                    ReadSheet readSheet = EasyExcel.readSheet().build();
                    excelReader.read(readSheet);
                    //关闭流
                    byteStream.close();
                }
                zipStream.close();
            }
        } catch (IOException e) {
            this.getLogger().error("存储发放清单信息失败," + e.getMessage(), e);
            throw new UserFriendlyException("存储发放清单信息失败");
        }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值