批量解压某文件夹下的.zip文件并生成对应文件夹名

该博客主要展示了如何使用Java实现ZIP文件的解压缩功能。通过`unZipFile`方法,程序可以将ZIP文件解压到指定目录。此外,`showDir`方法遍历目录并递归解压包含的ZIP文件。程序还提供了根据文件路径和模式显示目录内容的辅助功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


package leetcode.editor.cn;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.Scanner;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * @author Dkui
 * @version 1.0.0
 * @ClassName fileZip.java
 * @Description TODO
 * @createTime 2021年11月12日 17:01:00
 */


public class fileZip {
    /**
     * 指定解压单个文件(可循环调用)
     *
     * @param zipFile 解压的文件路径含文件本身
     * @param descDir 解压到某个路径
     * @Author Maiza
     */

    public static void unZipFile(File zipFile, String descDir) {
        File pathFile = new File(descDir);
        OutputStream out = null;
        InputStream in = null;
        ZipFile zip = null;
        try {
            if (!pathFile.exists()) {
                pathFile.mkdirs();
            }
            //设置处理压缩包语言
            zip = new ZipFile(zipFile, Charset.forName("UTF-8"));
            //开始循环解压缩
            for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
                String zipEntryName = entry.getName();
                in = zip.getInputStream(entry);
                String outPath = descDir + "\\" + zipEntryName;
                out = new FileOutputStream(outPath);
                byte[] buf1 = new byte[1024];
                int len;
                while ((len = in.read(buf1)) > 0) {
                    out.write(buf1, 0, len);
                }
                //每次循环关闭一次流,避免资源泄露.如果不关闭,系统将一直占用资源.
                out.close();
                in.close();
            }
        } catch (Exception e) {

        } finally {
            try {
                out.close();
                in.close();
                zip.close();
            } catch (Exception e) {

            }
        }
    }

    public static void showDir(File dir, String pat) {
        if (dir.exists()) {
            //抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。
            File[] files = dir.listFiles();
            int count = count(pat);
            if (null != files) {
                for (int i = 0; i < files.length; i++) {
                    if (files[i].isDirectory()) {
                        showDir(files[i]);
                    } else {
                        System.out.println(files[i]);
//                        获取名称
                        String name = getName(files[i], count);
                        unZipFile(files[i], pat + "\\" + name);
                    }
                }
            }
        } else {
            System.out.println("文件不存在!");
        }
    }

    private static void showDir(File file) {
    }


    private static int count(String file) {
        String[] phats = file.split("\\\\");
        return phats.length;
    }

    private static String getName(File file, int count) {
        String fil = file.toString();
        String[] phats = fil.split("\\\\");
        String zipName = phats[count];
        String[] name = zipName.split(".zip");
        return name[0];
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要解压zip的文件夹地址:");
        String path = sc.nextLine();
        showDir(new File(path), path);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值