Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java 压缩文件夹


在 Java 中,你可以使用多种方式来压缩文件夹。下面我将介绍两种常用的实现方式:使用 Java 内置的 ZipOutputStream 和使用第三方库 Apache Commons Compress。

使用 Java 内置的 ZipOutputStream

步骤流程:

  1. 创建一个新的 ZipOutputStream 对象,将其连接到一个输出流,如 FileOutputStream,以创建一个新的 ZIP 文件。
  2. 遍历要压缩的文件夹中的所有文件和子文件夹。
  3. 对于每个文件或子文件夹,创建一个新的 ZipEntry 对象,将其添加到 ZipOutputStream 中。
  4. 将文件内容写入 ZipOutputStream 中。
  5. 关闭 ZipOutputStream 来完成压缩。

示例代码:

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

public class ZipFolder {
    public static void main(String[] args) {
        String sourceFolder = "path/to/source/folder";
        String zipFileName = "output.zip";

        try {
            FileOutputStream fos = new FileOutputStream(zipFileName);
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            File fileToZip = new File(sourceFolder);

            zipFile(fileToZip, fileToZip.getName(), zipOut);

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

    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[] buffer = new byte[1024];
        int length;
        while ((length = fis.read(buffer)) >= 0) {
            zipOut.write(buffer, 0, length);
        }

        fis.close();
    }
}

使用 Apache Commons Compress

步骤流程:

  1. 添加 Apache Commons Compress 的依赖。
  2. 使用 ZipArchiveOutputStream 创建一个新的 ZIP 文件。
  3. 遍历文件夹中的所有文件和子文件夹,使用 ArchiveEntry 创建新的条目。
  4. 将文件内容添加到条目中。
  5. 关闭 ZipArchiveOutputStream 来完成压缩。

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'

示例代码:

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

import java.io.*;

public class ZipFolderApacheCommons {
    public static void main(String[] args) {
        String sourceFolder = "path/to/source/folder";
        String zipFileName = "output.zip";

        try {
            FileOutputStream fos = new FileOutputStream(zipFileName);
            ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(fos);
            File fileToZip = new File(sourceFolder);

            zipFile(fileToZip, fileToZip.getName(), zipOut);

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

    private static void zipFile(File fileToZip, String fileName, ZipArchiveOutputStream 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;
        }

        ZipArchiveEntry entry = new ZipArchiveEntry(fileName);
        zipOut.putArchiveEntry(entry);

        FileInputStream fis = new FileInputStream(fileToZip);
        IOUtils.copy(fis, zipOut);
        fis.close();

        zipOut.closeArchiveEntry();
    }
}

以上是使用 Java 内置的 ZipOutputStream 和 Apache Commons Compress 进行文件夹压缩的两种方法。根据你的需求和项目环境,你可以选择其中一种来实现。

下面我将介绍两种常用的方式:使用Java内置库和使用第三方库ApacheCommonsCompress。对于每个文件,创建一个新的`ZipE ...
以下是三种常用的实现方式:使用Java标准库、使用ApacheCommonsCompress库和使用Java的ZipOutputStream ...
在Java中压缩字符串有多种实现方式,其中常用的方式包括使用GZIP压缩和使用Deflater压缩。以上就是使用GZIP和Deflater两 ...
###方式一:使用Java原生库ImageIO步骤流程:1.示例代码:依赖坐标(Maven):依赖坐标(Gradle):###方式三:使用第 ...
在Java中访问共享文件夹有几种方式,我将为你列出每种方式的步骤流程,并为每种方式提供示例代码和相应的Maven和Gradle依赖坐标。示例 ...