FileDocCategorySizeDatePackage
ZipScanner.javaAPI DocApache Ant 1.703942Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.types

ZipScanner

public class ZipScanner extends ArchiveScanner
Scans zip archives for resources.

Fields Summary
Constructors Summary
Methods Summary
protected voidfillMapsFromArchive(Resource src, java.lang.String encoding, java.util.Map fileEntries, java.util.Map matchFileEntries, java.util.Map dirEntries, java.util.Map matchDirEntries)
Fills the file and directory maps with resources read from the archive.

param
src the archive to scan.
param
encoding encoding used to encode file names inside the archive.
param
fileEntries Map (name to resource) of non-directory resources found inside the archive.
param
matchFileEntries Map (name to resource) of non-directory resources found inside the archive that matched all include patterns and didn't match any exclude patterns.
param
dirEntries Map (name to resource) of directory resources found inside the archive.
param
matchDirEntries Map (name to resource) of directory resources found inside the archive that matched all include patterns and didn't match any exclude patterns.

        ZipEntry entry = null;
        ZipFile zf = null;

        File srcFile = null;
        if (src instanceof FileResource) {
            srcFile = ((FileResource) src).getFile();
        } else {
            throw new BuildException("only file resources are supported");
        }

        try {
            try {
                zf = new ZipFile(srcFile, encoding);
            } catch (ZipException ex) {
                throw new BuildException("problem reading " + srcFile, ex);
            } catch (IOException ex) {
                throw new BuildException("problem opening " + srcFile, ex);
            }
            Enumeration e = zf.getEntries();
            while (e.hasMoreElements()) {
                entry = (ZipEntry) e.nextElement();
                Resource r = new ZipResource(srcFile, encoding, entry);
                String name = entry.getName();
                if (entry.isDirectory()) {
                    name = trimSeparator(name);
                    dirEntries.put(name, r);
                    if (match(name)) {
                        matchDirEntries.put(name, r);
                    }
                } else {
                    fileEntries.put(name, r);
                    if (match(name)) {
                        matchFileEntries.put(name, r);
                    }
                }
            }
        } finally {
            if (zf != null) {
                try {
                    zf.close();
                } catch (IOException ex) {
                    // swallow
                }
            }
        }