Zip 解压时中文文件名乱码

 /**
     * 解压zip文件
     *
     * @param zipFileName     待解压的zip文件路径,例如:c:\\a.zip
     * @param outputDirectory 解压目标文件夹,例如:c:\\a\
     */
    public static String unZip(String zipFileName, String outputDirectory)
            throws Exception {

        org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(zipFileName,"GBK");
        
        org.apache.tools.zip.ZipEntry zipEntry = null;
        try {
            Enumeration<?> e = zipFile.getEntries();
            createDirectory(outputDirectory, "");
            while (e.hasMoreElements()) {
                zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement();
                if (zipEntry.isDirectory()) {
                    String name = zipEntry.getName();
                    name = name.substring(0, name.length() - 1);
                    File f = new File(outputDirectory + File.separator + name);
                    f.mkdir();
                } else {
                    String fileName = zipEntry.getName();
                    fileName = fileName.replace('\\', '/');
                    if (fileName.indexOf("/") != -1) {
                        createDirectory(outputDirectory, fileName.substring(0, fileName.lastIndexOf("/")));
                        fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
                    }
                    File f = new File(outputDirectory + File.separator + zipEntry.getName());
                    f.createNewFile();
                    InputStream in = zipFile.getInputStream(zipEntry);
                    System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));
                    FileOutputStream out = new FileOutputStream(f);

                    byte[] by = new byte[1024];
                    int c;
                    while ((c = in.read(by)) != -1) {
                        out.write(by, 0, c);
                    }
                    in.close();
                    out.close();
                }
            }
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        } finally {
            zipFile.close();
        }
        return outputDirectory+"\\"+zipEntry.getName();
    }