URL和URI

    private static void getDataFromURL() throws MalformedURLException, IOException
    {
        // System.getProperties().put("http.proxyHost", "someProxyURL");
        // System.getProperties().put("http.proxyPort", "someProxyPort");

        URL url = new URL("http://liuxi1024.iteye.com/blog/519047");
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();

        // 设置用户代理头字段,不然iteye.com站点不会给我们返回数据
        httpConn.addRequestProperty("User-Agent", "Mozilla");
        httpConn.connect();
        // 获得所有响应头
        Map<String, List<String>> headers = httpConn.getHeaderFields();
        for (String key : headers.keySet())
        {
            System.out.println(key + ": " + headers.get(key));
            if ("Content-Type".equalsIgnoreCase(key))
            {
                List<String> values = headers.get(key);
                System.out.println("Found: " + values);
                String contentType = values.get(0);
                String[] parts = contentType.split(";");
                String charset = "";
                if (parts.length > 1)
                {
                    charset = parts[1].trim();
                    charset = charset.substring(charset.lastIndexOf("=") + 1);
                }
                System.out.println("Charset: " + charset);
            }
        }
        // 获得输入流
        InputStream in = httpConn.getInputStream();
        int data = 0;
        while (-1 != (data = in.read()))
            System.out.write(data);
        System.out.flush();
        in.close();
    }

    private static void getResource2() throws URISyntaxException
    {
        // URI 统一资源标识符 用于标识一个资源,只要用于资源的解析操作
        // URL 统一资源定位符 用于定位一个资源,不仅可以用于解析资源,还可以获取一个资源的内容
        URL url = URLOrURI.class.getResource("tu hao.txt");
        // 结果:file:/C:/xxx/workspace/classloader/bin/com/classloader/tu%20hao.txt
        // 会将返回结果中的空格、非ascii码字符进行转义
        System.out.println(url);

        URI uri = url.toURI();
        // 结果:/C:/xxx/workspace/classloader/bin/com/classloader/tu hao.txt
        // 如果要获得转义前的字符串,可以调用url的toURI获得对应的URI,然后调用getPath即可
        // URI的getPath方法会将结果字符串进行解码
        System.out.println(uri.getPath());

        // 结果:file:/C:/xxx/workspace/classloader/bin/com/classloader/%e5%9c%9f%e8%b1%aa.txt
        url = URLOrURI.class.getResource("土豪.txt");
        System.out.println(url);
    }

    private static void getResource()
    {
        URL url = URLOrURI.class.getResource("/");
        // 结果:file:/C:/xxx/workspace/classloader/bin/ 相对classpath根目录
        // 如果classpath中还有其他目录存在当前项目的classes目录之前,
        // 则会优先返回其他目录
        // 由于class.getResource真正调用的是classloader.getResource,
        // 而classloader.getResource又会委托给父classloader去查找resource
        // 所以如果java/jdk**/jre下存在一个classes目录,
        // 这个方法会返回java/jdk**/jre/classes目录
        System.out.println(url);

        url = URLOrURI.class.getResource("");
        // 结果:file:/C:/xxx/workspace/classloader/bin/com/classloader/ 相对当前包目录
        System.out.println(url);

        url = URLOrURI.class.getClassLoader().getResource("");
        // 结果:file:/C:/xxx/workspace/classloader/bin/ 相对classpath根目录
        System.out.println(url);

        url = URLOrURI.class.getClassLoader().getResource("/");
        // 结果:null
        System.out.println(url);
    }

你可能感兴趣的:(url,uri)