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

📄 locator.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        uri = buf.toString().replace('/', File.separatorChar);        if (File.pathSeparatorChar == ';' && uri.startsWith("\\") && uri.length() > 2            && Character.isLetter(uri.charAt(1)) && uri.lastIndexOf(':') > -1) {            uri = uri.substring(1);        }        String path = null;        try {            path = decodeUri(uri);            String cwd = System.getProperty("user.dir");            int posi = cwd.indexOf(":");            if ((posi > 0) && path.startsWith(File.separator)) {               path = cwd.substring(0, posi + 1) + path;            }        } catch (UnsupportedEncodingException exc) {            // not sure whether this is clean, but this method is            // declared not to throw exceptions.            throw new IllegalStateException(                "Could not convert URI " + uri + " to path: "                + exc.getMessage());        }        return path;    }    /**     * Decodes an Uri with % characters.     * The URI is escaped     * @param uri String with the uri possibly containing % characters.     * @return The decoded Uri     * @throws UnsupportedEncodingException if UTF-8 is not available     * @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, WORD);                    char c2 = iter.next();                    if (c2 != CharacterIterator.DONE) {                        int i2 = Character.digit(c2, WORD);                        sb.write((char) ((i1 << NIBBLE) + 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 >= ASCII_SIZE) {                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 + BYTE_SIZE;                    sb.append('%');                    sb.append(gHexChs[ch >> NIBBLE]);                    sb.append(gHexChs[ch & NIBBLE_MASK]);                } 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 libToolsJar            = File.separator + "lib" + File.separator + "tools.jar";        String javaHome = System.getProperty("java.home");        File toolsJar = new File(javaHome + libToolsJar);        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() - "/jre".length());            toolsJar = new File(javaHome + libToolsJar);        }        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();            String littlePath = path.toLowerCase(Locale.US);            for (int i = 0; i < extensions.length; ++i) {                if (littlePath.endsWith(extensions[i])) {                    urls[0] = fileToURL(location);                    break;                }            }            return urls;        }        File[] matches = location.listFiles(            new FilenameFilter() {                public boolean accept(File dir, String name) {                    String littleName = name.toLowerCase(Locale.US);                    for (int i = 0; i < extensions.length; ++i) {                        if (littleName.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 + -