public static boolean unzipFile( String zipFile, String destinationDir ) {
        // Try to create the required directories and exit if it fails.
        File dstDir = new File( destinationDir );
        if( !dstDir.exists() && !dstDir.mkdirs() ) {
            System.err.println( "Could not create directory: " + destinationDir );
            return( false );
        }

        InputStream in = null;
        ZipInputStream zin = null;
        try {
            in = new BufferedInputStream( new FileInputStream( zipFile ) );
            zin = new ZipInputStream( in );
            ZipEntry e;
            while( ( e = zin.getNextEntry() ) != null ) {
                File outputLocation = new File( destinationDir, e.getName() );
                if( e.isDirectory() )
                    outputLocation.mkdirs();
                else
                    unzip( zin, outputLocation );
            }
        }
        catch( IOException ex ) {
            ex.printStackTrace();
            return( false );
        }
        finally {
            try {
                zin.close();
            }
            catch( IOException ex ) {
                ex.printStackTrace();
                return( false );
            }
        }
        return( true );
    }