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

📄 resourceutils.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                in = new BufferedReader(isr);                OutputStreamWriter osw = null;                if (outputEncoding == null) {                    osw = new OutputStreamWriter(dest.getOutputStream());                } else {                    osw = new OutputStreamWriter(dest.getOutputStream(),                                                 outputEncoding);                }                out = new BufferedWriter(osw);                if (filterChainsAvailable) {                    ChainReaderHelper crh = new ChainReaderHelper();                    crh.setBufferSize(FileUtils.BUF_SIZE);                    crh.setPrimaryReader(in);                    crh.setFilterChains(filterChains);                    crh.setProject(project);                    Reader rdr = crh.getAssembledReader();                    in = new BufferedReader(rdr);                }                LineTokenizer lineTokenizer = new LineTokenizer();                lineTokenizer.setIncludeDelims(true);                String newline = null;                String line = lineTokenizer.getToken(in);                while (line != null) {                    if (line.length() == 0) {                        // this should not happen, because the lines are                        // returned with the end of line delimiter                        out.newLine();                    } else {                        newline = filters.replaceTokens(line);                        out.write(newline);                    }                    line = lineTokenizer.getToken(in);                }            } finally {                FileUtils.close(out);                FileUtils.close(in);            }        } else if (filterChainsAvailable                   || (inputEncoding != null                       && !inputEncoding.equals(outputEncoding))                   || (inputEncoding == null && outputEncoding != null)) {            BufferedReader in = null;            BufferedWriter out = null;            try {                InputStreamReader isr = null;                if (inputEncoding == null) {                    isr = new InputStreamReader(source.getInputStream());                } else {                    isr = new InputStreamReader(source.getInputStream(),                                                inputEncoding);                }                in = new BufferedReader(isr);                OutputStreamWriter osw = null;                if (outputEncoding == null) {                    osw = new OutputStreamWriter(dest.getOutputStream());                } else {                    osw = new OutputStreamWriter(dest.getOutputStream(),                                                 outputEncoding);                }                out = new BufferedWriter(osw);                if (filterChainsAvailable) {                    ChainReaderHelper crh = new ChainReaderHelper();                    crh.setBufferSize(FileUtils.BUF_SIZE);                    crh.setPrimaryReader(in);                    crh.setFilterChains(filterChains);                    crh.setProject(project);                    Reader rdr = crh.getAssembledReader();                    in = new BufferedReader(rdr);                }                char[] buffer = new char[FileUtils.BUF_SIZE];                while (true) {                    int nRead = in.read(buffer, 0, buffer.length);                    if (nRead == -1) {                        break;                    }                    out.write(buffer, 0, nRead);                }            } finally {                FileUtils.close(out);                FileUtils.close(in);            }        } else {            InputStream in = null;            OutputStream out = null;            try {                in = source.getInputStream();                out = dest.getOutputStream();                byte[] buffer = new byte[FileUtils.BUF_SIZE];                int count = 0;                do {                    out.write(buffer, 0, count);                    count = in.read(buffer, 0, buffer.length);                } while (count != -1);            } finally {                FileUtils.close(out);                FileUtils.close(in);            }        }        if (preserveLastModified && dest instanceof Touchable) {            setLastModified((Touchable) dest, source.getLastModified());        }    }    // CheckStyle:ParameterNumberCheck ON    /**     * Set the last modified time of an object implementing     * org.apache.tools.ant.types.resources.Touchable .     *     * @param t the Touchable whose modified time is to be set.     * @param time the time to which the last modified time is to be set.     *             if this is -1, the current time is used.     * @since Ant 1.7     */    public static void setLastModified(Touchable t, long time) {        t.touch((time < 0) ? System.currentTimeMillis() : time);    }    /**     * Compares the contents of two Resources.     *     * @param r1 the Resource whose content is to be compared.     * @param r2 the other Resource whose content is to be compared.     * @param text true if the content is to be treated as text and     *        differences in kind of line break are to be ignored.     *     * @return true if the content of the Resources is the same.     *     * @throws IOException if the Resources cannot be read.     * @since Ant 1.7     */    public static boolean contentEquals(Resource r1, Resource r2, boolean text) throws IOException {        if (r1.isExists() != r2.isExists()) {            return false;        }        if (!r1.isExists()) {            // two not existing files are equal            return true;        }        // should the following two be switched?  If r1 and r2 refer to the same file,        // isn't their content equal regardless of whether that file is a directory?        if (r1.isDirectory() || r2.isDirectory()) {            // don't want to compare directory contents for now            return false;        }        if (r1.equals(r2)) {            return true;        }        if (!text) {            long s1 = r1.getSize();            long s2 = r2.getSize();            if (s1 != Resource.UNKNOWN_SIZE && s2 != Resource.UNKNOWN_SIZE                    && s1 != s2) {                return false;            }        }        return compareContent(r1, r2, text) == 0;    }    /**     * Compare the content of two Resources. A nonexistent Resource's     * content is "less than" that of an existing Resource; a directory-type     * Resource's content is "less than" that of a file-type Resource.     * @param r1 the Resource whose content is to be compared.     * @param r2 the other Resource whose content is to be compared.     * @param text true if the content is to be treated as text and     *        differences in kind of line break are to be ignored.     * @return a negative integer, zero, or a positive integer as the first     *         argument is less than, equal to, or greater than the second.     * @throws IOException if the Resources cannot be read.     * @since Ant 1.7     */    public static int compareContent(Resource r1, Resource r2, boolean text) throws IOException {        if (r1.equals(r2)) {            return 0;        }        boolean e1 = r1.isExists();        boolean e2 = r2.isExists();        if (!(e1 || e2)) {            return 0;        }        if (e1 != e2) {            return e1 ? 1 : -1;        }        boolean d1 = r1.isDirectory();        boolean d2 = r2.isDirectory();        if (d1 && d2) {            return 0;        }        if (d1 || d2) {            return d1 ? -1 : 1;        }        return text ? textCompare(r1, r2) : binaryCompare(r1, r2);    }    /**     * Binary compares the contents of two Resources.     * <p>     * simple but sub-optimal comparision algorithm. written for working     * rather than fast. Better would be a block read into buffers followed     * by long comparisions apart from the final 1-7 bytes.     * </p>     *     * @param r1 the Resource whose content is to be compared.     * @param r2 the other Resource whose content is to be compared.     * @return a negative integer, zero, or a positive integer as the first     *         argument is less than, equal to, or greater than the second.     * @throws IOException if the Resources cannot be read.     * @since Ant 1.7     */    private static int binaryCompare(Resource r1, Resource r2) throws IOException {        InputStream in1 = null;        InputStream in2 = null;        try {            in1 = new BufferedInputStream(r1.getInputStream());            in2 = new BufferedInputStream(r2.getInputStream());            for (int b1 = in1.read(); b1 != -1; b1 = in1.read()) {                int b2 = in2.read();                if (b1 != b2) {                    return b1 > b2 ? 1 : -1;                }            }            return in2.read() == -1 ? 0 : -1;        } finally {            FileUtils.close(in1);            FileUtils.close(in2);        }    }    /**     * Text compares the contents of two Resources.     * Ignores different kinds of line endings.     * @param r1 the Resource whose content is to be compared.     * @param r2 the other Resource whose content is to be compared.     * @return a negative integer, zero, or a positive integer as the first     *         argument is less than, equal to, or greater than the second.     * @throws IOException if the Resources cannot be read.     * @since Ant 1.7     */    private static int textCompare(Resource r1, Resource r2) throws IOException {        BufferedReader in1 = null;        BufferedReader in2 = null;        try {            in1 = new BufferedReader(new InputStreamReader(r1.getInputStream()));            in2 = new BufferedReader(new InputStreamReader(r2.getInputStream()));            String expected = in1.readLine();            while (expected != null) {                String actual = in2.readLine();                if (!expected.equals(actual)) {                    return expected.compareTo(actual);                }                expected = in1.readLine();            }            return in2.readLine() == null ? 0 : -1;        } finally {            FileUtils.close(in1);            FileUtils.close(in2);        }    }    /**     * Log which Resources (if any) have been modified in the future.     * @param logTo the ProjectComponent to do the logging.     * @param rc the collection of Resources to check.     * @param granularity the timestamp granularity to use.     * @since Ant 1.7     */    private static void logFuture(ProjectComponent logTo,                                  ResourceCollection rc, long granularity) {        long now = System.currentTimeMillis() + granularity;        Date sel = new Date();        sel.setMillis(now);        sel.setWhen(TimeComparison.AFTER);        Restrict future = new Restrict();        future.add(sel);        future.add(rc);        for (Iterator iter = future.iterator(); iter.hasNext();) {            logTo.log("Warning: " + ((Resource) iter.next()).getName()                     + " modified in the future.", Project.MSG_WARN);        }    }}

⌨️ 快捷键说明

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