解压缩.zip和.7z文件

这里记录下两种压缩类型文件的解压及解析。

一、.zip

/**
     * 扩展资源类型
     * @param file
     */
    public void getExpandResourceTypeZip( MultipartFile file,Long resourceId,Long productModelId,Long resourceType,File f) throws Exception{
        //定义三种集合
        List<ResultPloy> getFileList =new ArrayList<>();
        List<ResultPloy> getFileNameList =new ArrayList<>();
        List<ResultPloy> readIniFileList =new ArrayList<>();
        Long platform = tbProductModelMapper.selectResourcePlatformByModelId(productModelId);
        //根据资源类型和平台读取策略
        List<TbExpandPloy> tbExpandPloys = tbExpandPloyMapper.queryExpandPloyByTypeAndPlat(resourceType, platform);
        if (!ObjectUtils.isEmpty(tbExpandPloys)){
            //匹配策略
            for (TbExpandPloy p : tbExpandPloys) {
                List<ResourceExpandPloy> ployList = JSONArray.parseArray(p.getRules(), ResourceExpandPloy.class);
                //期望文件名结果
                List<String> resultFileNames =new ArrayList<>();
                for (ResourceExpandPloy ploy : ployList) {
                    String replace = ploy.getRule().replaceFirst("/", "").replace("/i", "");
                    String[] split = replace.split("\\|");
                    for (String s : split) {
                        resultFileNames.add(s);
                    }
                    ResultPloy resultPloy = new ResultPloy();
                    resultPloy.setResourceExtendTypeId(Long.valueOf(p.getResourceExpandType()));
                    if (Objects.equals("getFile",ploy.getGet())){
                        resultPloy.setResourceExtendValue(resultFileNames);
                        getFileList.add(resultPloy);
                    }
                    if (Objects.equals("getFileName",ploy.getGet())){
                        resultPloy.setResourceExtendValue(resultFileNames);
                        getFileNameList.add(resultPloy);
                    }
                    if (Objects.equals("readIniFile",ploy.getGet())){
                        resultPloy.setResourceExtendValue(resultFileNames);
                        resultPloy.setAttr(ploy.getAttr());
                        readIniFileList.add(resultPloy);
                    }

                }
            }

        List<TbTestResourceExtend>  tbTestResourceExtendList = new ArrayList<>();
        //解压后路径文件夹--区分是否为重新解析
        String resName = null;
        if (file != null){
            resName = file.getOriginalFilename();
        }else {
            resName = f.getName();
            String substring = resName.substring(resName.lastIndexOf("_"), resName.lastIndexOf("."));
            resName = resName.replace(substring, "");
        }
        File srcFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" +resName);
        if (file != null){
            FileUtils.copyInputStreamToFile(file.getInputStream(), srcFile);
        }
        // 判断源文件是否存在
        if (!srcFile.exists()) {
            throw new ServiceException(srcFile.getPath() + "所指文件不存在");
        }
        ZipFile zipFile = new ZipFile(srcFile, Charset.forName("GBK"));//创建压缩文件对象
        //开始解压
        Enumeration<?> entries = zipFile.entries();
        while (entries.hasMoreElements()) {
            ZipEntry entry = (ZipEntry) entries.nextElement();
            // 如果是文件夹,就创建个文件夹 && entry.getName().contains(file.getOriginalFilename())
            if (entry.isDirectory()) {
                String dirPath = RuoYiConfig.getProfile() +  "/"+res+"/" + entry.getName();
                srcFile.mkdirs();
            } else {
                // 如果是文件,就先创建一个文件,然后用io流把内容copy过去
                File targetFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" + entry.getName());
                //getFileList
                if (!ObjectUtils.isEmpty(getFileList)){
                    for (ResultPloy resultPloy : getFileList) {
                        List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
                        for (String resourceExtendValue : resourceExtendValueList) {
                            if (targetFile.getName().contains(resourceExtendValue)){
                                TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
                                tbTestResourceExtend.setResourceId(resourceId);
                                tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
                                tbTestResourceExtend.setResourceExtendValue(targetFile.getName());
                                tbTestResourceExtendList.add(tbTestResourceExtend);
                            }
                        }
                    }
                }
                //getFileNameList
                if (!ObjectUtils.isEmpty(getFileNameList)){
                    for (ResultPloy resultPloy : getFileNameList) {
                        List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
                        for (String resourceExtendValue : resourceExtendValueList) {
                            if (targetFile.getName().contains(resourceExtendValue)){
                                TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
                                tbTestResourceExtend.setResourceId(resourceId);
                                tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
                                tbTestResourceExtend.setResourceExtendValue(targetFile.getName().substring(0, targetFile.getName().lastIndexOf(".")));
                                tbTestResourceExtendList.add(tbTestResourceExtend);
                            }
                        }
                    }
                }
                // 保证这个文件的父文件夹必须要存在
                if (!targetFile.getParentFile().exists()) {
                    targetFile.getParentFile().mkdirs();
                }
                targetFile.createNewFile();
                // 将压缩文件内容写入到这个文件中
                InputStream is = zipFile.getInputStream(entry);
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String content = null;
                while ((content = br.readLine()) != null) {
                    //一行一行读取内容
                    if (!ObjectUtils.isEmpty(readIniFileList) && !StringUtils.isEmpty(content) && content.contains("=")){
                        for (ResultPloy resultPloy : readIniFileList) {
                            List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
                            String attr = resultPloy.getAttr();
                            for (String resourceExtendValue : resourceExtendValueList) {
                                if (targetFile.getName().contains(resourceExtendValue) && content.contains(attr)){
                                    TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
                                    tbTestResourceExtend.setResourceId(resourceId);
                                    tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
                                    tbTestResourceExtend.setResourceExtendValue(content.substring(content.lastIndexOf("=")+1));
                                    tbTestResourceExtendList.add(tbTestResourceExtend);
                                }
                            }
                        }
                    }
                }
                is.close();
            }
        }
        //批量入库
        if (!ObjectUtils.isEmpty(tbTestResourceExtendList)){
            tbTestResourceExtendMapper.insertBatch(tbTestResourceExtendList);
        }
        }
    }

二、.7z

/**
     * 7z
     * @param file
     * @param resourceId
     * @param productModelId
     * @param resourceType
     * @throws Exception
     */
    public void getExpandResourceType7z(MultipartFile file,Long resourceId,Long productModelId,Long resourceType,File f) throws Exception{
        //定义三种集合
        List<ResultPloy> getFileList =new ArrayList<>();
        List<ResultPloy> getFileNameList =new ArrayList<>();
        List<ResultPloy> readIniFileList =new ArrayList<>();
        Long platform = tbProductModelMapper.selectResourcePlatformByModelId(productModelId);
        //根据资源类型和平台读取策略
        List<TbExpandPloy> tbExpandPloys = tbExpandPloyMapper.queryExpandPloyByTypeAndPlat(resourceType, platform);
        if (!ObjectUtils.isEmpty(tbExpandPloys)){
            //匹配策略
            for (TbExpandPloy p : tbExpandPloys) {
                List<ResourceExpandPloy> ployList = JSONArray.parseArray(p.getRules(), ResourceExpandPloy.class);
                //期望文件名结果
                List<String> resultFileNames =new ArrayList<>();
                for (ResourceExpandPloy ploy : ployList) {
                    String replace = ploy.getRule().replaceFirst("/", "").replace("/i", "");
                    String[] split = replace.split("\\|");
                    for (String s : split) {
                        resultFileNames.add(s);
                    }
                    ResultPloy resultPloy = new ResultPloy();
                    resultPloy.setResourceExtendTypeId(Long.valueOf(p.getResourceExpandType()));
                    if (Objects.equals("getFile",ploy.getGet())){
                        resultPloy.setResourceExtendValue(resultFileNames);
                        getFileList.add(resultPloy);
                    }
                    if (Objects.equals("getFileName",ploy.getGet())){
                        resultPloy.setResourceExtendValue(resultFileNames);
                        getFileNameList.add(resultPloy);
                    }
                    if (Objects.equals("readIniFile",ploy.getGet())){
                        resultPloy.setResourceExtendValue(resultFileNames);
                        resultPloy.setAttr(ploy.getAttr());
                        readIniFileList.add(resultPloy);
                    }

                }
            }

        List<TbTestResourceExtend>  tbTestResourceExtendList = new ArrayList<>();
        //解压后路径文件夹--区分是否为重新解析
        String resName = null;
        if (file != null){
            resName = file.getOriginalFilename();
        }else {
            resName = f.getName();
            String substring = resName.substring(resName.lastIndexOf("_"), resName.lastIndexOf("."));
            resName = resName.replace(substring, "");
        }
        File srcFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" +resName);
        if (file != null){
            FileUtils.copyInputStreamToFile(file.getInputStream(), srcFile);
        }

        // 判断源文件是否存在
        if (!srcFile.exists()) {
            throw new ServiceException(srcFile.getPath() + "所指文件不存在");
        }

        //----------------7z开始解压-=================
        SevenZFile zIn = new SevenZFile(srcFile);
        SevenZArchiveEntry entry = null;
        while ((entry = zIn.getNextEntry()) != null) {
            if (entry.isDirectory()) {
                srcFile.mkdirs();
            }else {
                File targetFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" + entry.getName());

                //getFileList
                if (!ObjectUtils.isEmpty(getFileList)){
                    for (ResultPloy resultPloy : getFileList) {
                        List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
                        for (String resourceExtendValue : resourceExtendValueList) {
                            if (targetFile.getName().contains(resourceExtendValue)){
                                TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
                                tbTestResourceExtend.setResourceId(resourceId);
                                tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
                                tbTestResourceExtend.setResourceExtendValue(targetFile.getName());
                                tbTestResourceExtendList.add(tbTestResourceExtend);
                            }
                        }
                    }
                }
                //getFileNameList
                if (!ObjectUtils.isEmpty(getFileNameList)){
                    for (ResultPloy resultPloy : getFileNameList) {
                        List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
                        for (String resourceExtendValue : resourceExtendValueList) {
                            if (targetFile.getName().contains(resourceExtendValue)){
                                TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
                                tbTestResourceExtend.setResourceId(resourceId);
                                tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
                                tbTestResourceExtend.setResourceExtendValue(targetFile.getName().substring(0, targetFile.getName().lastIndexOf(".")));
                                tbTestResourceExtendList.add(tbTestResourceExtend);
                            }
                        }
                    }
                }

                if (!targetFile.getParentFile().exists()) {
                    targetFile.getParentFile().mkdirs();
                }
                targetFile.createNewFile();

                OutputStream out = new FileOutputStream(targetFile);
                BufferedOutputStream bos = new BufferedOutputStream(out);
                int len = -1;
                byte[] buf = new byte[1024];
                while ((len = zIn.read(buf)) != -1) {
                    bos.write(buf, 0, len);
                }
                // 关流顺序,先打开的后关闭--必须先关闭再读取
                bos.close();
                out.close();
                //以行读取数据
                InputStream is = new FileInputStream(targetFile);
                BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                String content = null;
                while ((content = br.readLine()) != null) {
                    //一行一行读取内容
                    if (!ObjectUtils.isEmpty(readIniFileList) && !StringUtils.isEmpty(content) && content.contains("=")){
                        for (ResultPloy resultPloy : readIniFileList) {
                            List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
                            String attr = resultPloy.getAttr();
                            for (String resourceExtendValue : resourceExtendValueList) {
                                if (targetFile.getName().contains(resourceExtendValue) && content.contains(attr)){
                                    TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
                                    tbTestResourceExtend.setResourceId(resourceId);
                                    tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
                                    tbTestResourceExtend.setResourceExtendValue(content.substring(content.lastIndexOf("=")+1));
                                    tbTestResourceExtendList.add(tbTestResourceExtend);
                                }
                            }
                        }
                    }
                }
                is.close();
            }
        }
        //批量入库
        if (!ObjectUtils.isEmpty(tbTestResourceExtendList)){
            tbTestResourceExtendMapper.insertBatch(tbTestResourceExtendList);
        }
        }
    };

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值