java中g(shù)zip壓縮怎么保留源文件

小億
203
2024-03-06 16:23:58

在Java中可以使用GZIPOutputStream來(lái)進(jìn)行g(shù)zip壓縮操作,但是無(wú)法直接保留源文件,因?yàn)閴嚎s操作是對(duì)數(shù)據(jù)進(jìn)行處理后輸出到目標(biāo)文件中。如果想要保留源文件,可以先將源文件內(nèi)容讀取到內(nèi)存中,然后進(jìn)行壓縮操作,最后將壓縮后的數(shù)據(jù)寫(xiě)入目標(biāo)文件,并將源文件內(nèi)容寫(xiě)回源文件。

以下是一個(gè)簡(jiǎn)單的示例代碼,演示了如何進(jìn)行g(shù)zip壓縮并保留源文件:

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 {
            // 讀取源文件內(nèi)容
            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);
            }

            // 壓縮源文件內(nèi)容
            FileOutputStream fos = new FileOutputStream(targetFile);
            GZIPOutputStream gos = new GZIPOutputStream(fos);
            gos.write(baos.toByteArray());
            gos.close();

            // 將源文件內(nèi)容寫(xiě)回源文件
            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();
        }
    }
}

在這個(gè)示例中,首先讀取源文件內(nèi)容到內(nèi)存中,然后使用GZIPOutputStream對(duì)源文件內(nèi)容進(jìn)行壓縮,將壓縮后的數(shù)據(jù)寫(xiě)入目標(biāo)文件。最后,將源文件內(nèi)容寫(xiě)回源文件,完成壓縮并保留源文件的操作。

0