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

JAVA herman 1562浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

看了几篇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\\业余草");
    }
}

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 使用java对文件夹进行zip解压缩