使用java对文件夹进行zip解压缩

看了几篇zip压缩算法的帖子,讲的算是比较细致了。但是算法只是讲算法,没有最终的实例代码。
今天我就使用java自带的java.util.zip.*来实现zip的解压缩。
代码如下:

public class ZipUtil {
  
    /** 
     * 添加到压缩文件中 
     * @param out 
     * @param f 
     * @param base 
     * @throws Exception 
     */  
    private void directoryZip(ZipOutputStream out, File f, String base) throws Exception {  
        // 如果传入的是目录  
        if (f.isDirectory()) {  
            File[] fl = f.listFiles();  
            // 创建压缩的子目录  
            out.putNextEntry(new ZipEntry(base + "/"));  
            if (base.length() == 0) {  
                base = "";  
            } else {  
                base = base + "/";  
            }  
            for (int i = 0; i < fl.length; i++) {  
                directoryZip(out, fl[i], base + fl[i].getName());  
            }  
        } else {  
            // 把压缩文件加入rar中  
            out.putNextEntry(new ZipEntry(base));  
            FileInputStream in = new FileInputStream(f);  
            byte[] bb = new byte[10240];  
            int aa = 0;  
            while ((aa = in.read(bb)) != -1) {  
                out.write(bb, 0, aa);  
            }  
            in.close();  
        }  
    }  
  
    /** 
     * 压缩文件 
     * @param zos 
     * @param file 
     * @throws Exception 
     */  
    private void fileZip(ZipOutputStream zos, File file) throws Exception {  
        if (file.isFile()) {  
            zos.putNextEntry(new ZipEntry(file.getName()));  
            FileInputStream fis = new FileInputStream(file);  
            byte[] bb = new byte[10240];  
            int aa = 0;  
            while ((aa = fis.read(bb)) != -1) {  
                zos.write(bb, 0, aa);  
            }  
            fis.close();  
            System.out.println(file.getName());  
        } else {  
            directoryZip(zos, file, "");  
        }  
    }  
  
    /** 
     * 解压缩文件 
     * @param zis 
     * @param file 
     * @throws Exception 
     */  
    private void fileUnZip(ZipInputStream zis, File file) throws Exception {  
        ZipEntry zip = zis.getNextEntry();  
        if (zip == null)  
            return;  
        String name = zip.getName();  
        File f = new File(file.getAbsolutePath() + "/" + name);  
        if (zip.isDirectory()) {  
            f.mkdirs();  
            fileUnZip(zis, file);  
        } else {  
            f.createNewFile();  
            FileOutputStream fos = new FileOutputStream(f);  
            byte b[] = new byte[10240];  
            int aa = 0;  
            while ((aa = zis.read(b)) != -1) {  
                fos.write(b, 0, aa);  
            }  
            fos.close();  
            fileUnZip(zis, file);  
        }  
    }  
      
    /** 
     * 根据filePath创建相应的目录 
     * @param filePath 
     * @return 
     * @throws IOException 
     */  
    private File mkdirFiles(String filePath) throws IOException{  
        File file = new File(filePath);  
        if(!file.getParentFile().exists()){  
            file.getParentFile().mkdirs();  
        }  
        file.createNewFile();  
        return file;  
    }  
  
    /** 
     * 对zipBeforeFile目录下的文件压缩,保存为指定的文件zipAfterFile 
     * @param zipBeforeFile     压缩之前的文件 
     * @param zipAfterFile      压缩之后的文件 
     */  
    public void zip(String zipBeforeFile, String zipAfterFile) {  
        try {  
            ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(mkdirFiles(zipAfterFile)));  
            fileZip(zos, new File(zipBeforeFile));  
            zos.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 解压缩文件unZipBeforeFile保存在unZipAfterFile目录下 
     * @param unZipBeforeFile       解压之前的文件 
     * @param unZipAfterFile        解压之后的文件 
     */  
    public void unZip(String unZipBeforeFile, String unZipAfterFile) {  
        try {  
            ZipInputStream zis = new ZipInputStream(new FileInputStream(unZipBeforeFile));  
            File f = new File(unZipAfterFile);  
            f.mkdirs();  
            fileUnZip(zis, f);  
            zis.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    
    public static void main(String[] args) {
    	ZipUtil zipUtil = new ZipUtil();
    	zipUtil.zip("C://Users//herman.xiong//Desktop//taoge.html", "C://Users//herman.xiong//Desktop//.zip");
    	zipUtil.unZip("C://Users//herman.xiong//Desktop//.zip", "C://Users//herman.xiong//Desktop//");
    }
}

使用java对文件夹进行zip解压缩

: » 使用java对文件夹进行zip解压缩

原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/251423.html

(0)
上一篇 2022年5月3日
下一篇 2022年5月3日

相关推荐

发表回复

登录后才能评论