⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tar.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            throw new BuildException("fullpath attribute may only "                                     + "be specified for "                                     + "filesets that specify a "                                     + "single file.");        }        TarFileSet tfs = asTarFileSet(afs);        if (isFileFileSet(rc)) {            FileSet fs = (FileSet) rc;            String[] files = getFileNames(fs);            for (int i = 0; i < files.length; i++) {                File f = new File(fs.getDir(getProject()), files[i]);                String name = files[i].replace(File.separatorChar, '/');                tarFile(f, tOut, name, tfs);            }        } else if (rc.isFilesystemOnly()) {            Iterator iter = rc.iterator();            while (iter.hasNext()) {                FileResource r = (FileResource) iter.next();                File f = r.getFile();                if (f == null) {                    f = new File(r.getBaseDir(), r.getName());                }                tarFile(f, tOut, f.getName(), tfs);            }        } else { // non-file resources            Iterator iter = rc.iterator();            while (iter.hasNext()) {                Resource r = (Resource) iter.next();                tarResource(r, tOut, r.getName(), tfs);            }        }    }    /**     * whether the given resource collection is a (subclass of)     * FileSet that only contains file system resources.     * @param rc the resource collection to check.     * @return true if the collection is a fileset.     * @since Ant 1.7     */    protected static final boolean isFileFileSet(ResourceCollection rc) {        return rc instanceof FileSet && rc.isFilesystemOnly();    }    /**     * Grabs all included files and directors from the FileSet and     * returns them as an array of (relative) file names.     * @param fs the fileset to operate on.     * @return a list of the filenames.     * @since Ant 1.7     */    protected static final String[] getFileNames(FileSet fs) {        DirectoryScanner ds = fs.getDirectoryScanner(fs.getProject());        String[] directories = ds.getIncludedDirectories();        String[] filesPerSe = ds.getIncludedFiles();        String[] files = new String [directories.length + filesPerSe.length];        System.arraycopy(directories, 0, files, 0, directories.length);        System.arraycopy(filesPerSe, 0, files, directories.length,                         filesPerSe.length);        return files;    }    /**     * Copies fullpath, prefix and permission attributes from the     * ArchiveFileSet to a new TarFileSet (or returns it unchanged if     * it already is a TarFileSet).     *     * @param archiveFileSet fileset to copy attributes from, may be null     * @return a new TarFileSet.     * @since Ant 1.7     */    protected TarFileSet asTarFileSet(ArchiveFileSet archiveFileSet) {        TarFileSet tfs = null;        if (archiveFileSet != null && archiveFileSet instanceof TarFileSet) {            tfs = (TarFileSet) archiveFileSet;        } else {            tfs = new TarFileSet();            tfs.setProject(getProject());            if (archiveFileSet != null) {                tfs.setPrefix(archiveFileSet.getPrefix(getProject()));                tfs.setFullpath(archiveFileSet.getFullpath(getProject()));                if (archiveFileSet.hasFileModeBeenSet()) {                    tfs.integerSetFileMode(archiveFileSet                                           .getFileMode(getProject()));                }                if (archiveFileSet.hasDirModeBeenSet()) {                    tfs.integerSetDirMode(archiveFileSet                                          .getDirMode(getProject()));                }                if (archiveFileSet                    instanceof org.apache.tools.ant.types.TarFileSet) {                    org.apache.tools.ant.types.TarFileSet t =                        (org.apache.tools.ant.types.TarFileSet) archiveFileSet;                    if (t.hasUserNameBeenSet()) {                        tfs.setUserName(t.getUserName());                    }                    if (t.hasGroupBeenSet()) {                        tfs.setGroup(t.getGroup());                    }                    if (t.hasUserIdBeenSet()) {                        tfs.setUid(t.getUid());                    }                    if (t.hasGroupIdBeenSet()) {                        tfs.setGid(t.getGid());                    }                }            }        }        return tfs;    }    /**     * This is a FileSet with the option to specify permissions     * and other attributes.     */    public static class TarFileSet        extends org.apache.tools.ant.types.TarFileSet {        private String[] files = null;        private boolean preserveLeadingSlashes = false;        /**         * Creates a new <code>TarFileSet</code> instance.         * Using a fileset as a constructor argument.         *         * @param fileset a <code>FileSet</code> value         */        public TarFileSet(FileSet fileset) {            super(fileset);        }        /**         * Creates a new <code>TarFileSet</code> instance.         *         */        public TarFileSet() {            super();        }        /**         *  Get a list of files and directories specified in the fileset.         * @param p the current project.         * @return a list of file and directory names, relative to         *    the baseDir for the project.         */        public String[] getFiles(Project p) {            if (files == null) {                files = getFileNames(this);            }            return files;        }        /**         * A 3 digit octal string, specify the user, group and         * other modes in the standard Unix fashion;         * optional, default=0644         * @param octalString a 3 digit octal string.         */        public void setMode(String octalString) {            setFileMode(octalString);        }        /**         * @return the current mode.         */        public int getMode() {            return getFileMode(this.getProject());        }        /**         * Flag to indicates whether leading `/'s should         * be preserved in the file names.         * Optional, default is <code>false</code>.         * @param b the leading slashes flag.         */        public void setPreserveLeadingSlashes(boolean b) {            this.preserveLeadingSlashes = b;        }        /**         * @return the leading slashes flag.         */        public boolean getPreserveLeadingSlashes() {            return preserveLeadingSlashes;        }    }    /**     * Set of options for long file handling in the task.     *     */    public static class TarLongFileMode extends EnumeratedAttribute {        /** permissible values for longfile attribute */        public static final String            WARN = "warn",            FAIL = "fail",            TRUNCATE = "truncate",            GNU = "gnu",            OMIT = "omit";        private final String[] validModes = {WARN, FAIL, TRUNCATE, GNU, OMIT};        /** Constructor, defaults to "warn" */        public TarLongFileMode() {            super();            setValue(WARN);        }        /**         * @return the possible values for this enumerated type.         */        public String[] getValues() {            return validModes;        }        /**         * @return true if value is "truncate".         */        public boolean isTruncateMode() {            return TRUNCATE.equalsIgnoreCase(getValue());        }        /**         * @return true if value is "warn".         */        public boolean isWarnMode() {            return WARN.equalsIgnoreCase(getValue());        }        /**         * @return true if value is "gnu".         */        public boolean isGnuMode() {            return GNU.equalsIgnoreCase(getValue());        }        /**         * @return true if value is "fail".         */        public boolean isFailMode() {            return FAIL.equalsIgnoreCase(getValue());        }        /**         * @return true if value is "omit".         */        public boolean isOmitMode() {            return OMIT.equalsIgnoreCase(getValue());        }    }    /**     * Valid Modes for Compression attribute to Tar Task     *     */    public static final class TarCompressionMethod extends EnumeratedAttribute {        // permissible values for compression attribute        /**         *    No compression         */        private static final String NONE = "none";        /**         *    GZIP compression         */        private static final String GZIP = "gzip";        /**         *    BZIP2 compression         */        private static final String BZIP2 = "bzip2";        /**         * Default constructor         */        public TarCompressionMethod() {            super();            setValue(NONE);        }        /**         *  Get valid enumeration values.         *  @return valid enumeration values         */        public String[] getValues() {            return new String[] {NONE, GZIP, BZIP2 };        }        /**         *  This method wraps the output stream with the         *     corresponding compression method         *         *  @param ostream output stream         *  @return output stream with on-the-fly compression         *  @exception IOException thrown if file is not writable         */        private OutputStream compress(final OutputStream ostream)            throws IOException {            final String v = getValue();            if (GZIP.equals(v)) {                return new GZIPOutputStream(ostream);            } else {                if (BZIP2.equals(v)) {                    ostream.write('B');                    ostream.write('Z');                    return new CBZip2OutputStream(ostream);                }            }            return ostream;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -