Java获取URL对应的资源

Java获取URL对应的资源
 
认识IP、认识URL是进行网络编程的第一步。java.net.URL提供了丰富的URL构建方式,并能够经过java.net.URL来获取资源。
 
1、认识URL
 
URL 表明一个统一资源定位符,它是指向互联网“资源”的指针。资源能够是简单的文件或目录,也能够是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
 
简单的能够把URL理解为包含:协议、主机名、端口、路径、查询字符串和参数等对象。每一段能够独立设置。
 
应用程序也能够指定一个“相对 URL”,它只包含到达相对于另外一个 URL 的资源的足够信息。HTML 页面中常常使用相对 URL。
 
相对 URL 不须要指定 URL 的全部组成部分。若是缺乏协议、主机名称或端口号,这些值将从完整指定的 URL 中继承。
 
因为 URL 不懂 URL 转义,因此它不会识别同一 URL 的对等编码和解码形式。
 
注意, URI 类在某些特定状况下对其组成字段执行转义。建议使用 URI 管理 URL 的编码和解码,并使用 toURI()URI.toURL() 实现这两个类之间的转换。
 
也可使用 URLEncoderURLDecoder 类,可是只适用于 HTML 形式的编码,它与 RFC2396 中定义的编码机制不一样。
(以上介绍来自Java API doc)
 
2、URL对象的构建
 
方式不少,能够看看API文档。
 
3、获取URL指定的资源
 
下面给个例子,说明如何获取到指定的资源。
import java.io.*;
import java.net.URL;
import java.net.URLConnection;

public class TestURL {
         public static void main(String[] args) throws IOException {
                test4();
                test3();
                test2();
                test();
        }

         /**
         * 获取URL指定的资源。
         *
         * @throws IOException
         */

         public static void test4() throws IOException {
                URL url = new URL( "http://lavasoft.blog.51cto.com/p_w_upload/200811/200811271227767778082.jpg");
                //得到此 URL 的内容。
                Object obj = url.getContent();
                System.out.println(obj.getClass().getName());
        }

        /**
         * 获取URL指定的资源
         *
         * @throws IOException
         */

        public static void test3() throws IOException {
                URL url = new URL("http://www.hrtsea.com/down/soft/45.htm");
                //返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的链接。
                URLConnection uc = url.openConnection();
                //打开的链接读取的输入流。
                InputStream in = uc.getInputStream();
                int c;
                while ((c = in.read()) != -1)
                        System.out.print(c);
                in.close();
        }

        /**
         * 读取URL指定的网页内容
         *
         * @throws IOException
         */

        public static void test2() throws IOException {
                URL url = new URL("http://www.hrtsea.com/down/soft/45.htm");
                //打开到此 URL 的链接并返回一个用于从该链接读入的 InputStream。
                Reader reader = new InputStreamReader(new BufferedInputStream(url.openStream()));
                int c;
                while ((c = reader.read()) != -1) {
                        System.out.print((char) c);
                }
                reader.close();
        }

        /**
         * 获取URL的输入流,并输出
         *
         * @throws IOException
         */

        public static void test() throws IOException {
                URL url = new URL("http://lavasoft.blog.51cto.com/62575/120430");
                //打开到此 URL 的链接并返回一个用于从该链接读入的 InputStream。
                InputStream in = url.openStream();
                int c;
                while ((c = in.read()) != -1)
                        System.out.print(c);
                in.close();
        }
}
 
4、Java所支持的URL类型
 
类型不少,经过下面这个工具能够测试,这个类来自 [url]http://www.java2s.com/Tutorial/Java/0320__Network/ProtocolTester.htm[/url]
 
import java.net.URL;

public class MainClass {

         public static void main(String[] args) {

                String host = "www.java2s.com";
                String file = "/index.html";

                String[] schemes = { "http", "https", "ftp", "mailto", "telnet", "file", "ldap", "gopher",
                                 "jdbc", "rmi", "jndi", "jar", "doc", "netdoc", "nfs", "verbatim", "finger", "daytime",
                                 "systemresource"};

                 for ( int i = 0; i < schemes.length; i++) {
                         try {
                                URL u = new URL(schemes[i], host, file);
                                System.out.println(schemes[i] + " is supported\r\n");
                        } catch (Exception ex) {
                                System.out.println(schemes[i] + " is not supported\r\n");
                        }
                }
        }
}
 
另外,还能够经过协议处理器自定义协议。
相关文章
相关标签/搜索