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

📄 locator.java

📁 java ant的源码!非常值得看的源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * @since Ant 1.7     */    public static String decodeUri(String uri) throws UnsupportedEncodingException {        if (uri.indexOf('%') == -1) {            return uri;        }        ByteArrayOutputStream sb = new ByteArrayOutputStream(uri.length());        CharacterIterator iter = new StringCharacterIterator(uri);        for (char c = iter.first(); c != CharacterIterator.DONE;             c = iter.next()) {            if (c == '%') {                char c1 = iter.next();                if (c1 != CharacterIterator.DONE) {                    int i1 = Character.digit(c1, 16);                    char c2 = iter.next();                    if (c2 != CharacterIterator.DONE) {                        int i2 = Character.digit(c2, 16);                        sb.write((char) ((i1 << 4) + i2));                    }                }            } else {                sb.write(c);            }        }        return sb.toString(URI_ENCODING);    }    /**     * Encodes an Uri with % characters.     * The URI is escaped     * @param path String to encode.     * @return The encoded string, according to URI norms     * @throws UnsupportedEncodingException if UTF-8 is not available     * @since Ant 1.7     */    public static String encodeURI(String path) throws UnsupportedEncodingException {        int i = 0;        int len = path.length();        int ch = 0;        StringBuffer sb = null;        for (; i < len; i++) {            ch = path.charAt(i);            // if it's not an ASCII character, break here, and use UTF-8 encoding            if (ch >= 128) {                break;            }            if (gNeedEscaping[ch]) {                if (sb == null) {                    sb = new StringBuffer(path.substring(0, i));                }                sb.append('%');                sb.append(gAfterEscaping1[ch]);                sb.append(gAfterEscaping2[ch]);                // record the fact that it's escaped            } else if (sb != null) {                sb.append((char) ch);            }        }        // we saw some non-ascii character        if (i < len) {            if (sb == null) {                sb = new StringBuffer(path.substring(0, i));            }            // get UTF-8 bytes for the remaining sub-string            byte[] bytes = null;            byte b;            bytes = path.substring(i).getBytes(URI_ENCODING);            len = bytes.length;            // for each byte            for (i = 0; i < len; i++) {                b = bytes[i];                // for non-ascii character: make it positive, then escape                if (b < 0) {                    ch = b + 256;                    sb.append('%');                    sb.append(gHexChs[ch >> 4]);                    sb.append(gHexChs[ch & 0xf]);                } else if (gNeedEscaping[b]) {                    sb.append('%');                    sb.append(gAfterEscaping1[b]);                    sb.append(gAfterEscaping2[b]);                } else {                    sb.append((char) b);                }            }        }        return sb == null ? path : sb.toString();    }    /**     * Convert a File to a URL.     * File.toURL() does not encode characters like #.     * File.toURI() has been introduced in java 1.4, so     * ANT cannot use it (except by reflection)     * FileUtils.toURI() cannot be used by Locator.java     * Implemented this way.     * File.toURL() adds file: and changes '\' to '/' for dos OSes     * encodeURI converts characters like ' ' and '#' to %DD     * @param file the file to convert     * @return URL the converted File     * @throws MalformedURLException on error     */    public static URL fileToURL(File file)        throws MalformedURLException {        try {            return new URL(encodeURI(file.toURL().toString()));        } catch (UnsupportedEncodingException ex) {            throw new MalformedURLException(ex.toString());        }    }    /**     * Get the File necessary to load the Sun compiler tools. If the classes     * are available to this class, then no additional URL is required and     * null is returned. This may be because the classes are explicitly in the     * class path or provided by the JVM directly.     *     * @return the tools jar as a File if required, null otherwise.     */    public static File getToolsJar() {        // firstly check if the tools jar is already in the classpath        boolean toolsJarAvailable = false;        try {            // just check whether this throws an exception            Class.forName("com.sun.tools.javac.Main");            toolsJarAvailable = true;        } catch (Exception e) {            try {                Class.forName("sun.tools.javac.Main");                toolsJarAvailable = true;            } catch (Exception e2) {                // ignore            }        }        if (toolsJarAvailable) {            return null;        }        // couldn't find compiler - try to find tools.jar        // based on java.home setting        String javaHome = System.getProperty("java.home");        File toolsJar = new File(javaHome + "/lib/tools.jar");        if (toolsJar.exists()) {            // Found in java.home as given            return toolsJar;        }        if (javaHome.toLowerCase(Locale.US).endsWith(File.separator + "jre")) {            javaHome = javaHome.substring(0, javaHome.length() - 4);            toolsJar = new File(javaHome + "/lib/tools.jar");        }        if (!toolsJar.exists()) {            System.out.println("Unable to locate tools.jar. "                 + "Expected to find it in " + toolsJar.getPath());            return null;        }        return toolsJar;    }    /**     * Get an array of URLs representing all of the jar files in the     * given location. If the location is a file, it is returned as the only     * element of the array. If the location is a directory, it is scanned for     * jar files.     *     * @param location the location to scan for Jars.     *     * @return an array of URLs for all jars in the given location.     *     * @exception MalformedURLException if the URLs for the jars cannot be     *            formed.     */    public static URL[] getLocationURLs(File location)         throws MalformedURLException {        return getLocationURLs(location, new String[]{".jar"});    }    /**     * Get an array of URLs representing all of the files of a given set of     * extensions in the given location. If the location is a file, it is     * returned as the only element of the array. If the location is a     * directory, it is scanned for matching files.     *     * @param location the location to scan for files.     * @param extensions an array of extension that are to match in the     *        directory search.     *     * @return an array of URLs of matching files.     * @exception MalformedURLException if the URLs for the files cannot be     *            formed.     */    public static URL[] getLocationURLs(File location,                                        final String[] extensions)         throws MalformedURLException {        URL[] urls = new URL[0];        if (!location.exists()) {            return urls;        }        if (!location.isDirectory()) {            urls = new URL[1];            String path = location.getPath();            for (int i = 0; i < extensions.length; ++i) {                if (path.toLowerCase().endsWith(extensions[i])) {                    urls[0] = fileToURL(location);                    break;                }            }            return urls;        }        File[] matches = location.listFiles(            new FilenameFilter() {                public boolean accept(File dir, String name) {                    for (int i = 0; i < extensions.length; ++i) {                        if (name.toLowerCase().endsWith(extensions[i])) {                            return true;                        }                    }                    return false;                }            });        urls = new URL[matches.length];        for (int i = 0; i < matches.length; ++i) {            urls[i] = fileToURL(matches[i]);        }        return urls;    }}

⌨️ 快捷键说明

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