Javaでgzip圧縮を行う際に、元のファイルを保持する方法はどうすればいいですか?

Javaでは、GZIPOutputStreamを使用してgzip圧縮を行うことができますが、元のファイルを直接保持することはできません。なぜなら、圧縮操作はデータを処理して別のファイルに出力するためです。元のファイルを保持したい場合は、まず元のファイルの内容をメモリに読み込み、圧縮操作を行い、最後に圧縮されたデータを目的のファイルに書き込み、元のファイルの内容を元のファイルに書き戻すことができます。

以下はgzip圧縮を行い、元のファイルを保持する方法を示す簡単なサンプルコードです。

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

public class GzipExample {

    public static void main(String[] args) {
        String sourceFile = "source.txt";
        String targetFile = "target.gz";

        try {
            // 读取源文件内容
            FileInputStream fis = new FileInputStream(sourceFile);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                baos.write(buffer, 0, bytesRead);
            }

            // 压缩源文件内容
            FileOutputStream fos = new FileOutputStream(targetFile);
            GZIPOutputStream gos = new GZIPOutputStream(fos);
            gos.write(baos.toByteArray());
            gos.close();

            // 将源文件内容写回源文件
            FileOutputStream fos2 = new FileOutputStream(sourceFile);
            fos2.write(baos.toByteArray());

            fis.close();
            baos.close();
            fos.close();
            fos2.close();
            
            System.out.println("压缩并保留源文件成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

この例では、まずソースファイルの内容をメモリに読み込み、次にGZIPOutputStreamを使用してソースファイルの内容を圧縮し、圧縮されたデータをターゲットファイルに書き込みます。最後に、ソースファイルの内容をソースファイルに書き戻して、圧縮が完了し、ソースファイルが保持されます。

bannerAds