Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java压缩文件


在 Java 中,你可以使用不同的方式来压缩文件。下面我会介绍两种常见的压缩文件的方式:使用 Java 标准库以及使用第三方库 Apache Commons Compress。

使用 Java 标准库

Java 标准库提供了 java.util.zip 包,可以用来进行文件压缩和解压操作。

步骤流程

  1. 创建一个输出流,将数据写入一个压缩文件。
  2. 创建一个 ZipOutputStream,将输出流包装起来,用于写入压缩文件的条目。
  3. 创建一个输入流,读取需要压缩的文件的内容。
  4. 使用 ZipEntry 来表示压缩文件的条目,并将其添加到 ZipOutputStream 中。
  5. 将输入流的内容写入到 ZipOutputStream,完成条目的添加。
  6. 重复步骤 3-5,以添加更多的文件条目。
  7. 关闭 ZipOutputStream 来完成压缩文件的创建。

示例代码

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

public class ZipExample {
    public static void main(String[] args) {
        String sourceFolderPath = "path/to/source/folder";
        String zipFilePath = "path/to/output/archive.zip";

        try {
            FileOutputStream fos = new FileOutputStream(zipFilePath);
            ZipOutputStream zipOut = new ZipOutputStream(fos);

            File sourceFolder = new File(sourceFolderPath);
            zipFolder(sourceFolder, sourceFolder.getName(), zipOut);

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

    private static void zipFolder(File folder, String parentFolder, ZipOutputStream zipOut) throws IOException {
        for (File file : folder.listFiles()) {
            if (file.isDirectory()) {
                zipFolder(file, parentFolder + "/" + file.getName(), zipOut);
            } else {
                FileInputStream fis = new FileInputStream(file);
                ZipEntry zipEntry = new ZipEntry(parentFolder + "/" + file.getName());
                zipOut.putNextEntry(zipEntry);

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

                zipOut.closeEntry();
                fis.close();
            }
        }
    }
}

使用 Apache Commons Compress

Apache Commons Compress 是一个流行的第三方库,提供了更多的压缩格式和选项。

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. 使用 ArchiveStreamFactory 创建一个压缩流,例如 ZipArchiveOutputStream
  3. 创建一个输入流,读取需要压缩的文件的内容。
  4. 创建 ArchiveEntry 来表示压缩文件的条目,并将其添加到压缩流中。
  5. 将输入流的内容写入到压缩流,完成条目的添加。
  6. 重复步骤 3-5,以添加更多的文件条目。
  7. 关闭压缩流来完成压缩文件的创建。

示例代码

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;

public class CommonsCompressExample {
    public static void main(String[] args) {
        String sourceFolderPath = "path/to/source/folder";
        String zipFilePath = "path/to/output/archive.zip";

        try {
            FileOutputStream fos = new FileOutputStream(zipFilePath);
            ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream)
                    new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, fos);

            File sourceFolder = new File(sourceFolderPath);
            zipFolder(sourceFolder, "", zipOut);

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

    private static void zipFolder(File folder, String parentFolder, ZipArchiveOutputStream zipOut) throws IOException {
        for (File file : folder.listFiles()) {
            if (file.isDirectory()) {
                zipFolder(file, parentFolder + file.getName() + "/", zipOut);
            } else {
                ArchiveEntry entry = zipOut.createArchiveEntry(file, parentFolder + file.getName());
                zipOut.putArchiveEntry(entry);

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

                zipOut.closeArchiveEntry();
                fis.close();
            }
        }
    }
}

这些示例代码可以帮助你了解如何使用 Java 标准库和 Apache Commons Compress 库来压缩文件。根据你的实际需求,你可以选择其中一种方式来实现文件压缩。记得根据需要适当处理异常、关闭流等。

Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。每个用双引号括起来的字符串都是 ...
##经典排序算法的实现###冒泡排序(BubbleSort)冒泡排序是一种简单的比较排序算法,它通过反复交换相邻的元素来实现排序。示例代码: ...
在Java中使用Redis主要涉及使用Redis客户端库来与Redis服务器进行通信。步骤流程:添加Maven依赖:编写Java代码示例:# ...
Java 是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级 Web 应用开发和移动应用开发。 ...
数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。例如,如果 a 是一个整型数组,a[i] 就是数组中 ...