1. URL(Uniform Resource Locator)类代表统一资源定位器,统一资源定位器是指互联网“资源”的名称。资源可以是简单的文件或目录,也可以是对跟为复杂的对象的引用,例如:对数据库或搜索引擎的查询。通常URL可以由协议名、主机、端口号和资源组成。URL的格式为“protocol://host:port/resourceName”。例如:http://ww.csdn.index.htm.
2. URL创建对象有两种:一种是绝对地址,URL url= new URL(“http://www.baidu.com”);还有一种相对地址,URL urla= new URL(“http://www.baidu.com”);URLurl = new URL(url,“a.html”);
3. URL的方法:
以一实例来演示这些方法的简单用法。
packagecom.Url;
importjava.net.MalformedURLException;
importjava.net.URL;
publicclass Demo {
/**
* @param args
* @throws MalformedURLException
*/
publicstaticvoid main(String[] args) throws MalformedURLException {
URL url = new URL("http://java.sun.com:80/docs/books/tutorial"
+"/index.html?name=networking#DOCWNLOADING");
//下面就是各种方法的用法:
System.out.println("filename= "+ url.getFile()); //filename=path+query
System.out.println("protocol= "+ url.getProtocol());
System.out.println("authority= "+ url.getAuthority()); //授权,公司签名 authority=host+port
System.out.println("host ="+ url.getHost());
System.out.println("port ="+ url.getPort());
System.out.println("path ="+ url.getPath());
System.out.println("query ="+ url.getQuery());
System.out.println("rel ="+ url.getRef()); //获取锚点
}
}
/*
* 执行结果
filename = /docs/books/tutorial/index.html?name=networking
protocol= http
authority= java.sun.com:80
host= java.sun.com
port= 80
path= /docs/books/tutorial/index.html
query= name=networking
rel =DOCWNLOADING
*/
另外还有方法:
URLConnectionopenConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。
InputStreamopenStream():打开与此URL的连接,并返回一个用于读取URL资源的InputStream.
4. URLDecoder类和URLEncoder类用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换。这就可以解释我们在用IE浏览器时地址栏中的乱码了。其实这不是乱码而是所谓的“application/x-www-form-urlencodedMIME字符串”
5. 当URL地址中含有非西欧字符的字符串时,系统会将这些非西欧字符串转换成我们认为的乱码。这里乱码与普通字符串的转换用到一下方法:
URLDecoder类中的decoder(Strings,String enc)静态方法,它可以将乱码转换成普通字符串。
URLEncoder类中的encoder(Strings,String enc)静态方法,它可以将普通字符串转换成pplication/x-www-form-urlencoded MIME字符串。
乱码转换详细请看下面实例:
packagecom.Url;
importjava.io.UnsupportedEncodingException;
importjava.net.URLDecoder;
importjava.net.URLEncoder;
publicclass TestUrl {
/**
* 演示浏览器地址栏中的‘乱码’与字符串的互相转换
* @param args
*/
publicstaticvoid main(String[] args) {
try {
//将普通字符串转换成application/x-www-form-urlencoded字符串
String str1 = URLEncoder.encode("java程序","UTF8");
System.out.println(str1);
//将application/x-www-form-urlencoded转换成字符串普通字符串
String str2 = URLDecoder.decode("编码转换成字符串:...."+"java%E7%A8%8B%E5%BA%8F","UTF-8");
System.out.println(str2);
} catch (UnsupportedEncodingException e) {
System.out.println(e.getMessage()); //返回此 throwable 的详细消息字符串。
/*e.printStackTrace(); 将此 throwable 及其追踪输出至标准错误流。
此方法将此 Throwable 对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
输出的第一行包含此对象的 toString() 方法的结果。
剩余行表示以前由方法 fillInStackTrace() 记录的数据*/
}
}
}
6. 需要注意的是:
仅包含西欧字符的普通字符串和pplication/x-www-form-urlencodedMIME字符串无需转换,而包含中文字符的普通字符串则需要转换。转换的方法是每个中文字符占两个字节,每个字节可以转换成两个十六进制的数字,所以每个中文字符将转换成%XX%XX的形式。当然,采用不同的字符集时,每个中文字符对应的字节数并不完全相同,所以使用URLEncoder和URLDecoder进行转换时也需要指定字符集
通过程序下载网页信息。案例分析:
packagecom.Url;
importjava.io.BufferedReader;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.net.URL;
publicclass UrlDemo {
/**
* @param args
* @throws IOException
*/
publicstaticvoid main(String[] args) throws IOException {
URL url = new URL("http://www.baidu.com");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
FileOutputStream fos = new FileOutputStream("d:\\baidu.html");
String line = null;
while((line=br.readLine())!=null) {
fos.write(line.getBytes());
System.out.println(line);
}
fos.close();
br.close();
}
}