Beispiel #1
0
    private void buildIndex() throws IOException {
      int entryCount = get2ByteLittleEndian(zipDir, 0);

      // Add each of the files
      if (entryCount > 0) {
        directories = new HashMap<RelativeDirectory, DirectoryEntry>();
        ArrayList<Entry> entryList = new ArrayList<Entry>();
        int pos = 2;
        for (int i = 0; i < entryCount; i++) {
          pos = readEntry(pos, entryList, directories);
        }

        // Add the accumulated dirs into the same list
        for (RelativeDirectory d : directories.keySet()) {
          // use shared RelativeDirectory objects for parent dirs
          RelativeDirectory parent = getRelativeDirectory(d.dirname().getPath());
          String file = d.basename();
          Entry zipFileIndexEntry = new Entry(parent, file);
          zipFileIndexEntry.isDir = true;
          entryList.add(zipFileIndexEntry);
        }

        entries = entryList.toArray(new Entry[entryList.size()]);
        Arrays.sort(entries);
      } else {
        cleanupState();
      }
    }