GZIP Decompresses one gzipped file into another file. - Java File Path IO

Java examples for File Path IO:GZIP

Description

GZIP Decompresses one gzipped file into another file.

Demo Code


//package com.java2s;
import java.io.*;
import java.util.zip.GZIPInputStream;

public class Main {
    public static final int BUFF_SIZE = 2048;

    /**//  w  w  w  .  java 2 s.c o  m
     * Decompresses one gzipped file into another file.
     *
     * @param toDecompress
     * @param destinationFile
     * @throws IOException if there was a problem.
     */
    public static void decompressFile(final File toDecompress,
            final File destinationFile) throws IOException {

        if (destinationFile.exists()) {
            throw new IOException("Refusing to overwrite an existing file.");
        }

        InputStream istream = null;
        OutputStream ostream = null;
        try {

            ostream = new BufferedOutputStream(new FileOutputStream(
                    destinationFile), BUFF_SIZE);
            istream = getCompressedFileAsStream(toDecompress);
            transferStream(istream, ostream);
        } finally {
            if (istream != null) {
                istream.close();
            }
            if (ostream != null) {
                ostream.close();
            }
        }
    }

    /**
     * gets an InputStream from a file that is gzip compressed.
     *
     * @param file
     * @return
     * @throws IOException
     */
    public static InputStream getCompressedFileAsStream(final File file)
            throws IOException {
        return new GZIPInputStream(new BufferedInputStream(
                new FileInputStream(file)));
    }

    /**
     * Transfers an InputStream to an OutputStream it is up to the job of the caller to close the streams.
     *
     * @param istream
     * @param ostream
     * @throws IOException
     */
    protected static void transferStream(final InputStream istream,
            final OutputStream ostream) throws IOException {
        final byte[] inBuf = new byte[BUFF_SIZE];
        int readBytes = istream.read(inBuf);
        while (readBytes >= 0) {
            ostream.write(inBuf, 0, readBytes);
            readBytes = istream.read(inBuf);
        }
    }
}

Related Tutorials