Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

JAVA zip压缩


在 Java 中,你可以使用多种方式进行 ZIP 压缩。以下是一些常用的实现方式,包括所需的步骤、依赖库和示例代码。

方法一:使用 java.util.zip 包

步骤流程:

  1. 创建一个输出流,将数据写入 ZIP 文件中。
  2. 创建一个 ZipOutputStream 对象,将输出流包装在其中。
  3. 遍历要压缩的文件或目录,将其写入 ZipOutputStream 中。
  4. 关闭 ZipOutputStream 来完成压缩。

示例代码:

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

public class ZipExample {
    public static void main(String[] args) throws IOException {
        String sourceFile = "path/to/source/file";
        String zipFile = "path/to/output/zip/file.zip";

        FileOutputStream fos = new FileOutputStream(zipFile);
        ZipOutputStream zipOut = new ZipOutputStream(fos);

        File fileToZip = new File(sourceFile);
        zipFile(fileToZip, fileToZip.getName(), zipOut);

        zipOut.close();
        fos.close();
    }

    private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
        if (fileToZip.isHidden()) {
            return;
        }
        if (fileToZip.isDirectory()) {
            File[] children = fileToZip.listFiles();
            for (File childFile : children) {
                zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
            }
            return;
        }

        FileInputStream fis = new FileInputStream(fileToZip);
        ZipEntry zipEntry = new ZipEntry(fileName);
        zipOut.putNextEntry(zipEntry);

        byte[] bytes = new byte[1024];
        int length;
        while ((length = fis.read(bytes)) >= 0) {
            zipOut.write(bytes, 0, length);
        }

        fis.close();
    }
}

方法二:使用 Apache Commons Compress 库

步骤流程:

  1. 添加 Apache Commons Compress 依赖。
  2. 创建一个 ArchiveOutputStream 对象(ZipArchiveOutputStream)来写入压缩文件。
  3. 遍历要压缩的文件或目录,将其添加到 ArchiveOutputStream 中。
  4. 关闭 ArchiveOutputStream 来完成压缩。

Maven 依赖坐标:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.22</version>
</dependency>

Gradle 依赖坐标:

implementation 'org.apache.commons:commons-compress:1.22'

示例代码:

import org.apache.commons.compress.archivers.zip.*;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;

public class CommonsCompressExample {
    public static void main(String[] args) throws IOException {
        String sourceFile = "path/to/source/file";
        String zipFile = "path/to/output/zip/file.zip";

        FileOutputStream fos = new FileOutputStream(zipFile);
        ArchiveOutputStream archiveOut = new ZipArchiveOutputStream(fos);

        File fileToZip = new File(sourceFile);
        zipFile(fileToZip, fileToZip.getName(), archiveOut);

        archiveOut.close();
        fos.close();
    }

    private static void zipFile(File fileToZip, String entryName, ArchiveOutputStream archiveOut) throws IOException {
        ZipArchiveEntry zipEntry = new ZipArchiveEntry(entryName);
        archiveOut.putArchiveEntry(zipEntry);

        if (fileToZip.isFile()) {
            FileInputStream fis = new FileInputStream(fileToZip);
            IOUtils.copy(fis, archiveOut);
            fis.close();
        }

        archiveOut.closeArchiveEntry();
    }
}

以上是两种常用的在 Java 中实现 ZIP 压缩的方式。你可以根据实际需求选择适合你项目的方法并进行实现。记得替换示例代码中的文件路径为你自己的路径。

注意:为了演示目的,以下示例代码可能需要进行适当的错误处理和异常处理,以确保代码的健壮性。示例代码:###使用ApacheCommonsCo ...
关闭`ZipOutputStream`和所有的`FileInputStream`对象。示例代码:###使用ApacheCommonsComp ...
下面我将介绍两种常用的方式:使用Java内置库和使用第三方库ApacheCommonsCompress。对于每个文件,创建一个新的`ZipE ...
对于每种方式,我将提供步骤流程以及示例代码,并列出相关的Maven和Gradle依赖坐标。使用`ZipOutputStream`将文件添加到 ...
在Java中压缩字符串有多种实现方式,其中常用的方式包括使用GZIP压缩和使用Deflater压缩。以上就是使用GZIP和Deflater两 ...