Java解压zip到指定文件夹

简介: Java解压zip到指定文件夹

引入下方工具类。

package com.jinzhi.common.utils;
import java.io.*;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
 * 孟智超
 * 2022/12/8
 */
public class UnzipUtils {
    /**
     * 解压zip压缩文件到指定目录
     *
     * @param zipPath zip压缩文件绝对路径
     * @param descDir 指定的解压目录
     */
    public static void unzipFile(String zipPath, String descDir) throws IOException {
        try {
            File zipFile = new File(zipPath);
            if (!zipFile.exists()) {
                throw new IOException("要解压的压缩文件不存在");
            }
            File pathFile = new File(descDir);
            if (!pathFile.exists()) {
                pathFile.mkdirs();
            }
            InputStream input = new FileInputStream(zipPath);
            unzipWithStream(input, descDir);
        } catch (Exception e) {
            throw new IOException(e);
        }
    }
    /**
     * 解压
     *
     * @param inputStream
     * @param descDir
     */
    public static void unzipWithStream(InputStream inputStream, String descDir) {
        if (!descDir.endsWith(File.separator)) {
            descDir = descDir + File.separator;
        }
        try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("GBK"))) {
            ZipEntry zipEntry;
            while ((zipEntry = zipInputStream.getNextEntry()) != null) {
                String zipEntryNameStr = zipEntry.getName();
                String zipEntryName = zipEntryNameStr;
                if (zipEntryNameStr.contains("/")) {
                    String str1 = zipEntryNameStr.substring(0, zipEntryNameStr.indexOf("/"));
                    zipEntryName = zipEntryNameStr.substring(str1.length() + 1);
                }
                String outPath = (descDir + zipEntryName).replace("\\\\", "/");
                File outFile = new File(outPath.substring(0, outPath.lastIndexOf('/')));
                if (!outFile.exists()) {
                    outFile.mkdirs();
                }
                if (new File(outPath).isDirectory()) {
                    continue;
                }
                writeFile(outPath, zipInputStream);
                zipInputStream.closeEntry();
            }
            System.out.println("======解压成功=======");
        } catch (IOException e) {
            System.out.println("压缩包处理异常,异常信息{}" + e);
        }
    }
    //将流写到文件中
    public static void writeFile(String filePath, ZipInputStream zipInputStream) {
        try (OutputStream outputStream = new FileOutputStream(filePath)) {
            byte[] bytes = new byte[4096];
            int len;
            while ((len = zipInputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, len);
            }
        } catch (IOException ex) {
            System.out.println("解压文件时,写出到文件出错");
        }
    }
}

编写测试方法进行测试

    //测试方法
    public static void main(String[] args) throws IOException {
        String zipPath = "D:/test/电子证书 (6).zip";
        String descDir = "D:/test/jy/";
        unzipFile(zipPath, descDir);
    }


D:/test/电子证书 (6).zip压缩文件解压到D:/test/jy/文件夹下。

a2ab0a34368c4581a2d2dc2f62db38e0.png

f7ec5405739345d982e0157d26965fa2.png


运行后

e9718203b507431ca2b734c05228f8fb.png


53e9f39e9f7b493ca8845c6e67d79dfa.png

相关文章
|
6天前
|
存储 Java 文件存储
如何用 Java 压缩 ZIP 文件?
【2月更文挑战第21天】
41 1
|
6天前
|
分布式计算 Hadoop Java
hadoop java 创建文件夹 弹出窗口填写文件夹名称
hadoop java 创建文件夹 弹出窗口填写文件夹名称
32 0
|
6天前
|
Java 关系型数据库 Linux
Linux|Java|jar包的解压和重新打包(更新配置)
Linux|Java|jar包的解压和重新打包(更新配置)
84 0
|
6月前
|
Java
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
52 0
|
6天前
|
Java
Java创建文件夹Java复制文件复制文件夹
Java创建文件夹Java复制文件复制文件夹
17 0
|
1天前
|
NoSQL Java Redis
如何在redis中设置文件夹名java - 蓝易云
在这个例子中,"folder:subfolder:key"就像一个文件夹路径,并且键的值被设置为"value"。然后,我们使用相同的键来获取并打印值。最后,记得关闭Jedis连接。
16 0
|
6天前
|
Java
java判断文件夹大小
将 `/path/to/your/folder`替换为要计算大小的文件夹的实际路径。这段代码将递归计算文件夹及其子文件夹中所有文件的大小,并以MB为单位输出文件夹的大小。
25 0
|
9月前
|
Java Maven Android开发
解决警告: Failed to scan JAR[...] java.util.zip.ZipException: error in opening zip file
解决警告: Failed to scan JAR[...] java.util.zip.ZipException: error in opening zip file
|
6天前
|
Java
Java【代码 15】文件操作相关方法(获取文件、复制文件、创建文件夹、获取图片文件、写出数据到文件、清理文件夹)
Java【代码 15】文件操作相关方法(获取文件、复制文件、创建文件夹、获取图片文件、写出数据到文件、清理文件夹)
31 0
|
6天前
|
Java
Java实现1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制
Java实现1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制
27 1