public static void unZiphasDir(String zipFileName, String targetDir) throws Exception {

        ZipFile zipFile = new ZipFile(zipFileName, "GBK");
        Enumeration emu = zipFile.getEntries();
        while (emu.hasMoreElements()) {
            ZipEntry entry = (ZipEntry) emu.nextElement();
            if (entry.isDirectory()) {
                File dir = new File(targetDir + entry.getName());
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                continue;
            }

            BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));
            File file = new File(targetDir + entry.getName());
            File parent = file.getParentFile();
            if (parent != null && (!parent.exists())) {
                parent.mkdirs();
            }

            FileOutputStream fos = new FileOutputStream(file);
            BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
            byte[] buf = new byte[BUFFER];
            int len = 0;
            while ((len = bis.read(buf, 0, BUFFER)) != -1) {
                fos.write(buf, 0, len);
            }

            bos.flush();
            bos.close();
            bis.close();
        }

        zipFile.close();
    }