迷茫君 2020-12-03 17:23 采纳率: 0%
浏览 115

java读取空zip压缩包报错,如何过滤空包文件?

java读取空zip压缩包报错,如何过滤空包文件?

  • 写回答

1条回答 默认 最新

  • let_Me_Pass 2020-12-03 17:47
    关注
     /**
         *
         * @param srcFile            zip源文件
         * @param destDirPath        解压后的目标文件夹
         * @throws RuntimeException  解压失败会抛出运行时异常
         */
        public static void unZip(File srcFile, String destDirPath) throws RuntimeException {
            System.out.println("---------------"+destDirPath);
            int BUFFER_SIZE=1024;
            long start = System.currentTimeMillis();
    
            // 判断源文件是否存在
    
            if (!srcFile.exists()) {
                throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
    
            }
    
            // 开始解压
    
            ZipFile zipFile = null;
    
            try {
                zipFile = new ZipFile(srcFile);
    
                Enumeration<?> entries = zipFile.entries();
    
                while (entries.hasMoreElements()) {
                    ZipEntry entry = (ZipEntry) entries.nextElement();
    
                    System.out.println("解压" + entry.getName());
    
                    // 如果是文件夹,就创建个文件夹
    
                    if (entry.isDirectory()) {
                        String dirPath = destDirPath + "/" + entry.getName();
    
                        File dir = new File(dirPath);
    
                        dir.mkdirs();
    
                    } else {
                        // 如果是文件,就先创建一个文件,然后用io流把内容copy过去
    
                        File targetFile = new File(destDirPath + "/" + entry.getName());
    
                        // 保证这个文件的父文件夹必须要存在
    
                        if(!targetFile.getParentFile().exists()){
                            targetFile.getParentFile().mkdirs();
    
                        }
    
                        targetFile.createNewFile();
    
                        // 将压缩文件内容写入到这个文件中
    
                        InputStream is = zipFile.getInputStream(entry);
    
                        FileOutputStream fos = new FileOutputStream(targetFile);
    
                        int len;
    
                        byte[] buf = new byte[BUFFER_SIZE];
    
                        while ((len = is.read(buf)) != -1) {
                            fos.write(buf, 0, len);
    
                        }
    
                        // 关流顺序,先打开的后关闭
    
                        fos.close();
    
                        is.close();
    
                    }
    
                }
    
                long end = System.currentTimeMillis();
    
                System.out.println("解压完成,耗时:" + (end - start) +" ms");
    
            } catch (Exception e) {
                throw new RuntimeException("unzip error from ZipUtils", e);
    
            } finally {
                if(zipFile != null){
                    try {
                        zipFile.close();
    
                    } catch (IOException e) {
                        e.printStackTrace();
    
                    }
    
                }
    
            }
    
        }
    
    
    评论

报告相同问题?