天天看點

如何使用Java進行檔案壓縮和解壓縮

作者:Java技術彙

Java是一種跨平台的程式設計語言,可以用于許多應用程式的開發,在進行檔案處理時也有多種方法可以用來實作。其中包括檔案壓縮和解壓縮,這在許多場合下都是非常有用的。

檔案壓縮是指将一個大檔案或目錄壓縮為單個壓縮檔案。這樣的好處是占用更少的磁盤空間,并且使檔案傳輸變得更加友善。Java中提供了ZipOutputStream和GZIPOutputStream類來完成檔案壓縮的任務。

如何使用Java進行檔案壓縮和解壓縮

ZipOutputStream類可以用于建立ZIP格式的壓縮檔案。下面是一段Java代碼,示範如何使用ZipOutputStream類來建立一個名為“compressed.zip”壓縮檔案,并向其中添加兩個檔案:

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

public class ZipExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      FileOutputStream fos = new FileOutputStream("compressed.zip");
      ZipOutputStream zos = new ZipOutputStream(fos);

      String file1 = "file1.txt";
      String file2 = "file2.txt";

      String[] files = {file1, file2};

      for (int i=0; i<files.length; i++) {
        FileInputStream fis = new FileInputStream(files[i]);
        zos.putNextEntry(new ZipEntry(files[i]));

        int length;
        while ((length = fis.read(buffer)) > 0) {
          zos.write(buffer, 0, length);
        }

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

      zos.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
           

上述代碼中,我們首先定義一個名為“compressed.zip”的輸出檔案流,并使用ZipOutputStream建立一個相應的輸出流。接着,我們将需要壓縮的兩個檔案存儲到一維數組變量files中,每次循環對其中一個檔案進行處理,在ZipOutputStream建立的壓縮檔案compressed.zip中添加這個檔案,并關閉壓縮項。最後,我們關閉整個壓縮過程。

GZIPOutputStream類可以用于建立GZIP格式的壓縮檔案。下面是一段Java代碼,展示如何使用GZIPOutputStream類來建立一個名為“compressed.gz”壓縮檔案:

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

public class GZIPExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      FileInputStream fis = new FileInputStream("input.txt");
      FileOutputStream fos = new FileOutputStream("compressed.gz");
      GZIPOutputStream gzipOS = new GZIPOutputStream(fos);

      int length;
      while ((length = fis.read(buffer)) > 0) {
        gzipOS.write(buffer, 0, length);
      }

      fis.close();
      gzipOS.finish();
      gzipOS.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
           

上述代碼中,我們首先定義一個名為“input.txt”的輸入檔案流,并定義一個名為“compressed.gz”的輸出檔案流。然後,我們使用GZIPOutputStream建立一個相應的壓縮輸出流。在while循環中,我們将從輸入檔案input.txt讀取資料,并将其寫入壓縮輸出流compressed.gz中。最後,我們關閉整個壓縮過程。

檔案解壓是指将一個已經壓縮的檔案恢複到原始狀态。Java提供了ZipInputStream和GZIPInputStream類來完成檔案解壓縮的任務。

ZipInputStream類可以用于解壓縮ZIP格式的檔案,下面是一個示範程式:

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

public class UnZipExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      ZipInputStream zis = new ZipInputStream(new FileInputStream("compressed.zip"));

      ZipEntry zipEntry = zis.getNextEntry();

      while (zipEntry != null) {
        String fileName = zipEntry.getName();
        FileOutputStream fos = new FileOutputStream(fileName);

        int length;
        while ((length = zis.read(buffer)) > 0) {
          fos.write(buffer, 0, length);
        }

        fos.close();
        zipEntry = zis.getNextEntry();
      }

      zis.closeEntry();
      zis.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
           

上述代碼中,我們首先定義一個名為“compressed.zip”的ZipInputStream輸入流,并擷取該檔案中的第一個條目(即壓縮檔案中的第一個檔案)。接着,在while循環中,我們向檔案系統寫入讀取自該輸入流的檔案,如果存在更多的條目,則重複進行此操作。最後,我們關閉整個解壓縮過程。

GZIPInputStream類可以用于解壓縮GZIP格式的檔案,下面是一個示範程式:

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

public class UnGZIPExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      GZIPInputStream gzipIS = new GZIPInputStream(new FileInputStream("compressed.gz"));

      String fileName = "output.txt";
      FileOutputStream fos = new FileOutputStream(fileName);

      int length;
      while ((length = gzipIS.read(buffer)) > 0) {
        fos.write(buffer, 0, length);
      }

      gzipIS.close();
      fos.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
           

上述代碼中,我們首先定義一個名為“compressed.gz”的GZIPInputStream輸入流,并将其讀取到一個名為“output.txt”的輸出流中。在while循環中,我們将讀取自GZIP輸入流gzipIS的資料寫入名為“output.txt”的輸出流中。最後,我們關閉整個解壓縮過程。

繼續閱讀