Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java 解压zip

作者:冷宸枫   发布日期:2025-11-28   浏览:116

import java.io.*;
import java.util.zip.*;

public class UnzipFile {
    public static void unzip(String zipFilePath, String destDirectory) {
        File dir = new File(destDirectory);
        // create output directory if it doesn't exist
        if (!dir.exists()) dir.mkdirs();
        try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath))) {
            ZipEntry zipEntry = zis.getNextEntry();
            while (zipEntry != null) {
                File newFile = newFile(dir, zipEntry);
                if (zipEntry.isDirectory()) {
                    newFile.mkdirs();
                } else {
                    // fix for Windows-created archives
                    new File(newFile.getParent()).mkdirs();
                    FileOutputStream fos = new FileOutputStream(newFile);
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = zis.read(buffer)) > 0) {
                        fos.write(buffer, 0, len);
                    }
                    fos.close();
                }
                zipEntry = zis.getNextEntry();
            }
            zis.closeEntry();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {
        File destFile = new File(destinationDir, zipEntry.getName());

        String destDirPath = destinationDir.getCanonicalPath();
        String destFilePath = destFile.getCanonicalPath();

        if (!destFilePath.startsWith(destDirPath + File.separator)) {
            throw new IOException("Entry is outside of the target dir: " + zipEntry.getName());
        }

        return destFile;
    }

    public static void main(String[] args) {
        String zipFilePath = "path/to/your/zipfile.zip";
        String destDirectory = "path/to/destination/directory";
        unzip(zipFilePath, destDirectory);
    }
}

解释说明:

  1. 导入必要的包:我们使用了java.io.*java.util.zip.*来处理文件输入输出和解压操作。
  2. 创建解压方法 unzip:这个方法接收两个参数,一个是ZIP文件的路径,另一个是目标目录的路径。它会读取ZIP文件中的每个条目,并根据条目类型(文件或目录)进行相应的处理。
  3. 处理文件和目录:对于每个ZIP条目,如果是目录,则创建对应的目录;如果是文件,则将文件内容写入到指定的目标路径中。
  4. 安全检查:在创建新文件时,代码会检查解压后的文件路径是否在目标目录内,以防止潜在的安全问题(例如路径穿越攻击)。
  5. 主函数:提供了一个简单的示例,展示了如何调用unzip方法。

你可以根据实际需求修改zipFilePathdestDirectory的值来解压不同的ZIP文件。

上一篇:java服务

下一篇:java 对象

大家都在看

java判断是windows还是linux

java连接数据库的代码

java djl

ubuntu 卸载java

es java api

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站