public static boolean unzipFile(File filename,File where) throws IOException{
        ZipFile zipFile = new ZipFile(filename);
        Enumeration files = zipFile.entries();
        FileOutputStream fos = null;

        while (files.hasMoreElements()) {
            try {
                ZipEntry entry = (ZipEntry) files.nextElement();
                InputStream eis = zipFile.getInputStream(entry);
                byte[] buffer = new byte[1024];
                int bytesRead = 0;

                File f = new File(where,entry.getName());

                if (entry.isDirectory()) {
                    f.mkdirs();
                    continue;
                } else {
                    f.getParentFile().mkdirs();
                    f.createNewFile();
                }

                fos = new FileOutputStream(f);

                while ((bytesRead = eis.read(buffer)) != -1) {
                    fos.write(buffer, 0, bytesRead);
                }
            } catch (IOException e) {
                Commons.log.log(Level.WARNING,"[NexT][Toolkit] Failed to unzip data.",e);continue;
            } finally {
                if (fos != null) 
                    try {fos.close();} catch (IOException e) {Commons.log.log(Level.WARNING,"[NexT][Toolkit] Failed to read archive.",e);}
            }
        }
        return true;
    }