Java如何压缩Gzip格式的文件?

在此代码示例中,我们将学习如何使用gzip压缩来压缩文件。从本质上讲,gzip只能压缩一个文件,不能将其用于压缩目录以及该目录中的所有文件。

您将用于以gzip格式压缩文件的类包括GZipOutputStream,FileInputStream和FileOutputStream类。压缩文件的步骤在下面的代码段注释中进行了描述。

package org.nhooo.example.zip;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;

public class GZipCompressExample {
    public static void main(String[] args) {
        // GZip输入和输出文件。
        String sourceFile = "data.txt";
        String targetFile = "output.gz";

        try (
            // 创建要输入的文件的文件输入流
            // 压缩。
            FileInputStream fis = new FileInputStream(sourceFile);

            // 创建文件输出流,将gzip结果写入
            // 指定的文件名。
            FileOutputStream fos = new FileOutputStream(targetFile);

            // 使用文件输出流创建gzip输出流对象
            // 作为论点。
            GZIPOutputStream gzos = new GZIPOutputStream(fos)) {

            // 定义用于迭代文件的缓冲区和临时变量
            // 输入流。
            byte[] buffer = new byte[1024];
            int length;

            // 读取并输入文件输入流的所有内容
            // 到gzip输出流对象。
            while ((length = fis.read(buffer)) > 0) {
                gzos.write(buffer, 0, length);
            }

            // 完成文件压缩并关闭所有流。
            gzos.finish();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}