class FileUtil {

    public static boolean unzipFile( final String zipFileAbsPath, final String outputDirAbsPath )
    {

        if ( StringUtils.isBlank( zipFileAbsPath ) || StringUtils.isBlank( outputDirAbsPath )
            || ( !FileUtil.isFileExists( zipFileAbsPath ) ) )
        {
            logger.debug( "" );
            return false;
        }
        ZipFile zipFile = null;
        try
        {
            zipFile = new ZipFile( zipFileAbsPath );
            Enumeration<? extends ZipEntry> entries = zipFile.entries();
            while ( entries.hasMoreElements() )
            {
                ZipEntry entry = entries.nextElement();
                File entryDestination = new File( outputDirAbsPath, entry.getName() );
                if ( entry.isDirectory() )
                {
                    entryDestination.mkdirs();
                }
                else
                {
                    entryDestination.getParentFile().mkdirs();
                    InputStream in = zipFile.getInputStream( entry );
                    OutputStream out = new FileOutputStream( entryDestination );
                    IOUtils.copy( in, out );
                    IOUtils.closeQuietly( in );
                    IOUtils.closeQuietly( out );
                }
            }
            return true;
        }
        catch ( IOException e )
        {
            logger.error( "Error while unzipping zip file: {}", zipFileAbsPath, e );
        }
        finally
        {
            try
            {
                if ( zipFile != null )
                {
                    zipFile.close();
                }
            }
            catch ( IOException e )
            {
                logger.warn( "Error while closing zip file.", e );
            }
        }
        return false;
    }

    private  FileUtil();

}