当前位置:首页 > Java

java如何解压文件

2026-02-05 09:08:41Java

使用 java.util.zip 包解压文件

Java 提供了 java.util.zip 包来处理 ZIP 格式的压缩文件。以下是一个简单的解压示例:

java如何解压文件

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

public class UnzipExample {
    public static void unzip(String zipFilePath, String destDirectory) throws IOException {
        File destDir = new File(destDirectory);
        if (!destDir.exists()) {
            destDir.mkdir();
        }

        try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath))) {
            ZipEntry entry = zipIn.getNextEntry();
            while (entry != null) {
                String filePath = destDirectory + File.separator + entry.getName();
                if (!entry.isDirectory()) {
                    extractFile(zipIn, filePath);
                } else {
                    File dir = new File(filePath);
                    dir.mkdir();
                }
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
        }
    }

    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath))) {
            byte[] bytesIn = new byte[4096];
            int read;
            while ((read = zipIn.read(bytesIn)) != -1) {
                bos.write(bytesIn, 0, read);
            }
        }
    }
}

使用 Apache Commons Compress 库

对于更复杂的压缩格式(如 RAR、7z 等),可以使用 Apache Commons Compress 库:

java如何解压文件

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;

public class CommonsUnzip {
    public static void unzip(String zipFile, String outputFolder) throws IOException {
        try (ZipArchiveInputStream zis = new ZipArchiveInputStream(new FileInputStream(zipFile))) {
            ZipArchiveEntry entry;
            while ((entry = zis.getNextZipEntry()) != null) {
                File outputFile = new File(outputFolder, entry.getName());
                if (entry.isDirectory()) {
                    outputFile.mkdirs();
                } else {
                    outputFile.getParentFile().mkdirs();
                    try (OutputStream os = new FileOutputStream(outputFile)) {
                        IOUtils.copy(zis, os);
                    }
                }
            }
        }
    }
}

处理 GZIP 压缩文件

对于单个文件的 GZIP 解压缩:

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

public class GzipExample {
    public static void ungzip(String gzipFile, String outputFile) throws IOException {
        try (GZIPInputStream gis = new GZIPInputStream(new FileInputStream(gzipFile));
             FileOutputStream fos = new FileOutputStream(outputFile)) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = gis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
            }
        }
    }
}

注意事项

解压文件时应考虑以下安全因素:

  • 检查解压路径是否在目标目录内,防止路径遍历攻击
  • 检查解压后文件大小,防止 ZIP 炸弹
  • 处理大文件时考虑内存使用情况
  • 关闭所有流资源,使用 try-with-resources 语句

这些方法提供了 Java 中处理常见压缩文件格式的基本方式,可根据具体需求进行调整和扩展。

标签: 文件java
分享给朋友:

相关文章

java程序如何运行

java程序如何运行

编写Java代码 使用文本编辑器或IDE(如IntelliJ IDEA、Eclipse)编写Java源代码,保存为.java文件。例如: public class HelloWorld {…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。 选…

java如何调试

java如何调试

调试Java程序的基本方法 使用IDE内置的调试工具(如IntelliJ IDEA或Eclipse)是最常见的方式。在代码行号旁点击设置断点,启动调试模式后,程序会在断点处暂停,允许查看变量值、调用栈…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…

vue文件树实现

vue文件树实现

Vue 文件树实现 实现文件树功能通常需要递归组件和动态数据加载。以下是一个基于 Vue 3 的完整实现方案: 数据结构设计 文件树的数据结构通常为嵌套对象数组,每个节点包含以下属性: const…

java下载功能vue实现

java下载功能vue实现

Java 后端文件下载功能实现 后端需提供文件下载的接口,通常使用 HttpServletResponse 实现。以下是一个简单的 Java Spring Boot 示例: @GetMapping(…