Esempio n. 1
0
  private static void unzipEntries(
      File folder, ZipInputStream zis, int itemCount, long time, ZipListener listener)
      throws IOException, FileNotFoundException {
    ZipEntry ze = null;

    int item = 0;

    while ((ze = zis.getNextEntry()) != null) {
      item++;

      String fileName = ze.getName();
      File newFile = new File(folder, fileName);

      LOG.debug("unzip: " + newFile.getAbsoluteFile());

      if (ze.isDirectory()) {
        if (!newFile.mkdirs()) {
          break;
        }
        continue;
      }

      if (listener != null) {
        int progress =
            (item == itemCount) ? 100 : (int) (((double) (item * 100)) / (double) (itemCount));
        listener.onUnzipping(fileName, progress);
      }

      FileOutputStream fos = new FileOutputStream(newFile);

      try {
        int n;
        byte[] buffer = new byte[1024];
        while ((n = zis.read(buffer)) > 0) {
          fos.write(buffer, 0, n);

          if (listener != null && listener.isCanceled()) { // not the best way
            throw new IOException("Uncompress operation cancelled");
          }
        }
      } finally {
        fos.close();
        zis.closeEntry();
      }

      newFile.setLastModified(time);
    }
  }
Esempio n. 2
0
  public void unzip(File zipFile, File dir) throws Exception {

    InputStream is = null;
    OutputStream os = null;
    ZipFile zip = null;

    try {

      zip = new ZipFile(zipFile);
      Enumeration<? extends ZipEntry> e = zip.entries();

      byte[] buffer = new byte[2048];
      int currentEntry = 0;

      while (e.hasMoreElements()) {

        ZipEntry zipEntry = (ZipEntry) e.nextElement();
        File file = new File(dir, zipEntry.getName());
        currentEntry++;

        if (zipEntry.isDirectory()) {

          if (!file.exists()) file.mkdirs();

          continue;
        }

        if (!file.getParentFile().exists()) file.getParentFile().mkdirs();

        try {

          int bytesLidos = 0;

          is = zip.getInputStream(zipEntry);
          os = new FileOutputStream(file);

          if (is == null)
            throw new ZipException("Erro ao ler a entrada do zip: " + zipEntry.getName());

          while ((bytesLidos = is.read(buffer)) > 0) os.write(buffer, 0, bytesLidos);

          if (listener != null) listener.unzip((100 * currentEntry) / zip.size());

        } finally {

          if (is != null)
            try {
              is.close();
            } catch (Exception ex) {
            }

          if (os != null)
            try {
              os.close();
            } catch (Exception ex) {
            }
        }
      }

    } finally {

      if (zip != null)
        try {
          zip.close();
        } catch (Exception e) {
        }
    }
  }