|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
第二部分 用URL检索数据 一.URL类 Java程序定位和检索网络上的数据最简朴的方式是使用URL类。 Java.net.URL类是对统一资源定位符的抽象。URL对象建立后,它的字段就不再改变。 构造java.net.URL实例的六个构造器: 1) 用字符串构造URL public URL(String url) throws MalformedURLException 2)用组件构造URL public URL(String protocol,String hostname,String file) throws MalformedURLException 这个构造器将端口设置为-1,所以协议的所有默认端口都可以用。 3)用组件构造URL public URL(String protocol,String host,int port,String file) throws MalformedURLException 对于默认端口不准确的极少见情况,这个构造器可以明确地用int变量指定端口 4) 构造相对URL public URL(URL base,String relative) throws MalformedURLException 这个构造器根据相对URL和基本URL构造绝对URL 例如: try { URL u1=new URL(“http://metalab.unc.edu/javafaq/index.html”); URL u2=new URL(u1,”mailinglists.html”); } catch (MalformedURLException e) { System.err.println(e); } 5) 指定URLStreamHandler public URL(URL base,String relative,URLStreamHandler handler) throws MalformedURLException 这个构造器由一个基本URL和相对part构建一个相对URL,然后用指定的处理器处理URL 6) 指定URLStreamHandler public URL(String protocol,String host,int port,String file,URLStreamHandler handler) throws MalformedURLException 这个构造器从它的组件部分构建URL,然后用指定的处理器处理URL。 除了这些构造器,Java类库中还有许多其他方式返回URL对象。其中大多数只是简朴的获取方式,只返回用户可能已经知道的URL,因为用户已经首先用它来创建对象。 二.分解URL URL可以认为是由五部分组成的: 1) 策略(scheme),也可以认为是协议 2) 权限 权限可以进一步分为用户信息、主机和端口。 3) 路径 4) 参考(ref),也称为节(section)或者已命名锚(named anchor) 5) 查询字符串 以只读方法访问URL这五部分的公共方式: 1) public String getProtocol() getProtocol()方式返回一个String,包含URL的策略:比如:”http”,”https”,”file”等等。 2) public String getHost() getHost()方式返回一个String,包含URL的主机名。 3) public int getPort() getPort()方式返回端口号,该数值是一个在URL中指定的int。假如在URL中没有指定端口,那么getPort()方式返回-1,标志着URL没有明确指定端口,同时使用协议的默认端口。 4) public String getFile() getFile()方式返回一个String,其中包含URL的路径和文件部分。从主机名后的第一个“/”开始,到另起一部分的“#”之前的符号,全部认为是文件部分。 5) public String getPath() 它与getFile()方式意义一样。 6) public String getRef() getRef()返回URL的命名锚部分。假如URL没有一个已命名的锚,那么这个方式返回null。 例如: try { URL u=new URL(“http://metalab.unc.edu/javafaq/javafaq.html#xtocid1902914”); System.out.println(“The ref of ”+u+ “ is ”+u.getRef(); } catch (MalformedURLException e) { System.err.println(e); } 这段代码返回中,getRef()返回的字符串xtocid1902914 7) public String getQuery() getQuery()方式返回URL的查询字符串。假如URL没有查询字符串,那么这个方式返回null。 8)public String getUserInfo() 某些URL包含用户名,并且甚至包含密码信息。它位于策略之后和主机名之前,“@”符号划定它的范围。假如URL不包含任何用户信息,那么这个方式返回null。Mailto URL会出现例外,在mailto:elharo@metalab.unc.edu 这样的URL中,elharo@metalab.unc.edu是路径,而不是用户信息和主机名。 9)public String getAuthority() getAuthority()返回URL的权限。包括用户信息、主机名和端口。 三.从URL检索数据 1) public final InputStream openStream() throws IOException openStream()方式连接URL参考的资源,实现客户机和服务器之间所有必要的握手连接,并且从可读数据返回InputStream。从InputStream得到的数据是URL参考文件的原始(即没有解析过的)内容。 2) public URLConnection openConnection() throws IOException openConnection()方式打开一个到指定URL的套接字并且返回一个URLConnection对象。URLConnection代表一个到网络资源的开放连接。 3) public final Object getContent() throws IOException getContent()方式检索URL参考的数据,并且试图把它转变成对象的某个类型。 4) public final Object getContent(Class[] classes) throws IOException getContent()方式的重载变量使得可以选择我们想要的类作为返回内容,这个方式试图按数组中的顺序返回URL的内容。 例如: URL u=new URL(“http://nwu.org”); Class[] types=new Class[3]; types[0]=String.class; types[1]=Reader.class; types[2]=InputStream.class; object o=u.getContent(types); 然后必须用instanceof测试返回对象的类型 if (o instanceof String) { System.out.println(o); } else if (o instanceof Reader) { int c; Reader r=(Reader) c; while ((c=r.read()) != -1) System.out.print((char) c); } else if (o instanceof InputStream) { int c; InputStream in=(InputStream) o; While ((c=in.read()) != -1) System.out.write(c); } else { System.out.println(“Error:unexcepted type ”+o.getClass()); } 四.工具方式 1) public boolean sameFile(URL other) sameFile()方式测试测试两个URL对象是否指向同一个文件。sameFile()执行的检测异常肤浅,它只是比较相对立的字段是否相等。sameFile()和equals()有相似之处,差别在于equals()需要考虑所有任何参数,而sameFile()不考虑。此外,任何类都可以传递到equals(),却只有URL类能传递到sameFile()。 2) public String toExternalForm() toExternalForm()和toString()方式一样。 五.对象方式 URL是从java.lang.Object继续来的,所以可以访问Object类的全部方式。类似于IentAddress类的对象方式。 六.协议处理器方式 1) public static synchronized void setURLStreamHandlerFactory(URLStreamHandleFactory factory) 这个方式为应用程序设置URLStreamHandleFactory,假如已经设置了类库,则此方式触发一个通用Error。 2) public void set(String protocol,String host,int port,String authority,String userInfo,String path,String query,String ref) 七.URLEncoder和URLDecoder类 java.net.URLEncoder类包含一个叫encode()的单一静态方式 public static String encode(String s) URLEncoder.Encoder()把任何非文字数字字符(除了空格、下划线、连字号、句点和星号)都转变位%序列,空格被转变为加号。 URLEncoder的主要用途在于为使用GET的CGI程序的通信预备查询字符串。 URLDecoder类把所有的加号转变位空格,把所有的百分号转义符转变为相应的字符。 public static String decode(String s) throws Exception 假如字符串包含一个百分号,而其后没有两个十六进制的数字,那么就会触发一个IllegalArgumentException。这个方式传递的是非转义字符,所以用户可以传递一个完整的URL。 返回类别: 教程 上一教程: StringBuffer帮你减轻Java的负担 下一教程: 如何快速成为Java高手[Tomjava原创] 您可以阅读与"Java网络编程的学习笔记(二)"相关的教程: · Java网络编程的学习笔记(一) · Java 网络编程---I/O部分学习笔记整理1 · 实例分析J2ME网络编程的两种方式 · java虚拟机学习笔记 · JAVA进阶学习:网络服务器编程 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |