Java中的GZIP文件–压缩和解压缩

时间:2020-01-09 10:35:28  来源:igfitidea点击:

在本文中,我们将介绍如何使用GZIP格式压缩和解压缩Java文件。使用GZIP,我们只能压缩单个文件,而不能压缩目录中的多个文件。

在这篇文章中,请参阅创建tar存档以gzip多个文件的过程GZIP Java中的多个文件创建Tar存档

Java GZIP示例-压缩和解压缩文件

GZIP压缩–使用GZIPOutputStream压缩文件。我们需要使用InputStream读取文件并将其写入GZIPOutputStream以获得GZIP格式的文件。

GZIP解压缩–使用GZIPInputStream解压缩文件。我们需要从GZIPInputStream读取文件并将其写入输出流以获取解压缩的文件。

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

public class GzipFile {
  public static void main(String[] args) {
    String SOURCE_FILE = "/home/theitroad/Documents/theitroad/postend";
    String GZIPPED_FILE = "/home/theitroad/Documents/theitroad/postend.gz";
    String DECOMPRESSED_FILE = "/home/theitroad/Documents/theitroad/postend_decomp.txt";
    GzipFile gzip = new GzipFile();
    // call to GZIP compress 
    gzip.compressGZipFile(SOURCE_FILE, GZIPPED_FILE);
    // call to GZIP decompress 
    gzip.deCompressGZipFile(GZIPPED_FILE, DECOMPRESSED_FILE);
  }
		
  public void compressGZipFile(String sourceFile, String gzipFile) {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    GZIPOutputStream gZIPOutputStream = null;	
    try {
      fis = new FileInputStream(sourceFile);
      fos = new FileOutputStream(gzipFile);
      gZIPOutputStream = new GZIPOutputStream(fos); 
      byte[] buffer = new byte[1024];
      int len;
      while((len = fis.read(buffer)) > 0){
        gZIPOutputStream.write(buffer, 0, len);
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      try {
        if(fis != null) {				
          fis.close();					
        }
        if(gZIPOutputStream != null) {				
          gZIPOutputStream.close();
        }
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
	
  public void deCompressGZipFile(String gzipFile, String destFile) {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    GZIPInputStream gZIPInputStream = null;
    try {
      fis = new FileInputStream(gzipFile);
      gZIPInputStream = new GZIPInputStream(fis);
      fos = new FileOutputStream(destFile);
      byte[] buffer = new byte[1024];
      int len;
      while((len = gZIPInputStream.read(buffer)) > 0){
        fos.write(buffer, 0, len);
      }
    }catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      try {
        if(gZIPInputStream != null) {				
          gZIPInputStream.close();
        }
        if(fos != null) {				
          fos.close();					
        }
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
}