code: @SuppressWarnings("unchecked")
  	public static File unzip(File zipFile, File outFile, Charset charset) throws UtilException {
  		charset = (null == charset) ? DEFAULT_CHARSET : charset;
  
  		ZipFile zipFileObj = null;
  		try {
  			zipFileObj = new ZipFile(zipFile, charset);
  			final Enumeration<ZipEntry> em = (Enumeration<ZipEntry>) zipFileObj.entries();
  			ZipEntry zipEntry = null;
  			File outItemFile = null;
  			while (em.hasMoreElements()) {
  				zipEntry = em.nextElement();
  				//FileUtil.file会检查slip漏洞，漏洞说明见http://blog.nsfocus.net/zip-slip-2/
  				outItemFile = FileUtil.file(outFile, zipEntry.getName());
  				if (zipEntry.isDirectory()) {
  					outItemFile.mkdirs();
  				} else {
  					FileUtil.touch(outItemFile);
  					copy(zipFileObj, zipEntry, outItemFile);
  				}
  			}
  		} catch (IOException e) {
  			throw new UtilException(e);
  		} finally {
  			IoUtil.close(zipFileObj);
  		}
  		return outFile;
  	}
docs: 解压
  
  @param zipFile zip文件
  @param outFile 解压到的目录
  @param charset 编码
  @return 解压的目录
  @throws UtilException IO异常
  @since 3.2.2