In this code example we will learn how to compress a file using the gzip compression. By its nature, gzip can only compress a single file, you can not use it for compressing a directory and all the files in that directory.
Classes that you will be using to compress a file in gzip format includes the GZipOutputStream
, FileInputStream
and FileOutputStream
classes. The steps for compressing a file described in the comments of the code snippet below.
package org.kodejava.util.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 input and output file.
String sourceFile = "data.txt";
String targetFile = "output.gz";
try (
// Create a file input stream of the file that is going to be
// compressed.
FileInputStream fis = new FileInputStream(sourceFile);
// Create a file output stream then write the gzip result into
// a specified file name.
FileOutputStream fos = new FileOutputStream(targetFile);
// Create a gzip output stream object with file output stream
// as the argument.
GZIPOutputStream gzos = new GZIPOutputStream(fos)) {
// Define buffer and temporary variable for iterating the file
// input stream.
byte[] buffer = new byte[1024];
int length;
// Read all the content of the file input stream and write it
// to the gzip output stream object.
while ((length = fis.read(buffer)) > 0) {
gzos.write(buffer, 0, length);
}
// Finish file compressing and close all streams.
gzos.finish();
} catch (IOException e) {
e.printStackTrace();
}
}
}