Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java多个文件压缩成zip


在 Java 中,你可以使用不同的方式将多个文件压缩成 ZIP 文件。以下是两种常见的实现方式,包括使用 Java 内置库和使用第三方库的方法。我将提供每种方式的详细步骤和示例代码,并在可能的情况下,列出 Maven 和 Gradle 的依赖坐标。

使用 Java 内置库

这种方法使用 java.util.zip 包中的类来压缩文件。以下是实现的步骤:

  1. 创建要压缩的文件列表。
  2. 创建一个输出 ZIP 文件的 ZipOutputStream
  3. 遍历要压缩的文件列表,将每个文件添加到 ZIP 中。
  4. 关闭 ZipOutputStream 以完成压缩。

示例代码:

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

public class ZipExample {
    public static void main(String[] args) {
        String[] filesToCompress = {"file1.txt", "file2.txt"};

        try {
            FileOutputStream fos = new FileOutputStream("compressed.zip");
            ZipOutputStream zipOut = new ZipOutputStream(fos);

            for (String file : filesToCompress) {
                File currentFile = new File(file);
                FileInputStream fis = new FileInputStream(currentFile);
                ZipEntry zipEntry = new ZipEntry(currentFile.getName());
                zipOut.putNextEntry(zipEntry);

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

                fis.close();
            }

            zipOut.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用第三方库 - Apache Commons Compress

Apache Commons Compress 库提供了更高级别的 API,更容易使用,并且支持各种压缩格式。在使用之前,需要添加相关依赖。

Maven 依赖:

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

Gradle 依赖:

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

实现步骤:

  1. 导入必要的类。
  2. 创建要压缩的文件列表。
  3. 使用 org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream 创建 ZIP 输出流。
  4. 遍历要压缩的文件列表,将每个文件添加到 ZIP 输出流。
  5. 关闭输出流以完成压缩。

示例代码:

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;

import java.io.*;

public class ApacheCommonsZipExample {
    public static void main(String[] args) {
        String[] filesToCompress = {"file1.txt", "file2.txt"};

        try {
            FileOutputStream fos = new FileOutputStream("compressed_commons.zip");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(bos);

            for (String file : filesToCompress) {
                File currentFile = new File(file);
                ZipArchiveEntry zipEntry = new ZipArchiveEntry(currentFile, currentFile.getName());
                zipOut.putArchiveEntry(zipEntry);

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

            zipOut.finish();
            zipOut.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

无论你选择使用 Java 的内置库还是第三方库,都可以根据你的需求和项目的特定要求来选择最适合的方法。

关闭`ZipOutputStream`和所有的`FileInputStream`对象。示例代码:###使用ApacheCommonsComp ...
下面我将介绍几种常用的实现方式,包括使用Java标准库以及一些流行的第三方库。使用`ZipArchiveOutputStream`来创建ZI ...
示例代码:###方法二:使用ApacheCommonsCompress库步骤流程:1.创建一个ArchiveOutputStream对象(Z ...
注意:为了演示目的,以下示例代码可能需要进行适当的错误处理和异常处理,以确保代码的健壮性。示例代码:###使用ApacheCommonsCo ...
创建一个`ZipInputStream`对象,将要解压的Zip文件传递给它。使用`getNextEntry()`方法遍历压缩文件中的条目,对 ...