How do I compress a file in GZip format?

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.example.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 = "core-sample/target/classes/input.txt";
        String targetFile = "core-sample/target/classes/output.gz";

        try {
            //
            // Create a file output stream the 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;

            //
            // Create a file input stream of the file that is going to be
            // compressed.
            //
            FileInputStream fis = new FileInputStream(sourceFile);

            //
            // 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.
            //
            fis.close();
            gzos.finish();
            gzos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Wayan

Programmer, runner, recreational diver, live in the island of Bali, Indonesia. Mostly programming in Java, Spring Framework, Hibernate / JPA. Support me by donating.

Leave a Reply