private NestedZipDirectory buildParent(ZipEntry entry, Map<String,ZipEntry> entries) { NestedZipDirectory result = this; String path = entry.getName().substring(getNameInZip().length()); String[] segments = path.split("/"); if (segments != null && segments.length > 1) { StringBuilder entryPath = new StringBuilder(getNameInZip()); for (int i=0; i<segments.length-1; i++) { String p = segments[i]; entryPath.append(p).append("/"); ZipEntry ze = entries.get(entryPath.toString()); if (ze != null) { result = new NestedZipDirectory(archive, ze, result, cache); } else { result = new NestedZipDirectory(archive, entryPath.toString(), result, cache); } } } return result; }
public NestedCloseableDirectory(IFile archive, NestedZipDirectory delegate) throws IOException { super(delegate); tempFile = File.createTempFile("archiveExtract", ".jar"); FileOutputStream fos = null; try { fos = new FileOutputStream(tempFile); IOUtils.copy(archive.open(), fos); this.delegate = new NestedZipDirectory(delegate, this); zip = new ZipFile(tempFile); } catch (IOException e) { IOUtils.close(fos); tempFile.delete(); throw e; } }
private List<IFile> listFiles(boolean includeFilesInNestedSubdirs) { Map<String, ZipEntry> entriesByName = new LinkedHashMap<String, ZipEntry>(); for (ZipEntry entry : getAllEntries()) { if (ZipDirectory.isInDir(getNameInZip(), entry, includeFilesInNestedSubdirs)) { entriesByName.put(entry.getName(), entry); } } List<IFile> files = new ArrayList<IFile>(); for (ZipEntry ze : entriesByName.values()) { NestedZipDirectory parent = includeFilesInNestedSubdirs ? buildParent(ze, entriesByName) : this; if (ze.isDirectory()) files.add(new NestedZipDirectory(archive, ze, parent, cache)); else files.add(new NestedZipFile(archive, ze, parent, cache)); } return files; }
if (ze.isDirectory()) return new NestedZipDirectory(archive, ze, parent, cache); else return new NestedZipFile(archive, ze, parent, cache); } else {
public IDirectory convertNested() { if (isDirectory()) return convert(); else if (FileSystemImpl.isValidZip(this)) return new NestedZipDirectory(this); else return null; }
public IDirectory convertNested() { if (isDirectory()) return convert(); else if (FileSystemImpl.isValidZip(this)) return new NestedZipDirectory(this); else return null; }