java.net.URL类是标准资源定位符。每一个URL明确地指定了因特网上一个资源的位置。URL有四个构造函数,每一个都声明了MalformedURLException
public URL(String u) throws MalformedURLException
public URL(String protocol, String host, String file) throws MalformedURLException
public URL(String protocol, String host, int port, String file) throws MalformedURLException
public URL(URL context, String u) throws MalformedURLException
如果构造器没有给定一个URL,MalformedURLException会被抛出。如果给你一个绝对的URL比如"http://www.jianshu.com/u/9e21abacd418",你会这样构造一个URL对象:
URL u = null;
try {
u = new URL("http://www.jianshu.com/u/9e21abacd418");
} catch (MalformedURLException e) {}
你也可以把协议,host和路径分开传入
URL u = null;
try {
u = new URL("http","www.jianshu.com","/u/9e21abacd418");
} catch (MalformedURLException e) {}
一般情况下,你不需要特地指定协议的端口,大多数协议有他们默认的端口,比如HTTP的协议的默认端口是80.如果端口改变了,可以使用下面的构造方法:
u = new URL("http","www.jianshu.com",8080,"/u/9e21abacd418");
一旦URL对象被构造,有两种方式获得它的内容。openStream()方法返回原始的数据流,getContent()方法返回一个对象代表数据。当你调用getContent()方法的时候,JAVA根据它的MIME类型,寻找一个content handler,然后返回一个可用的数据对象。
openStream()方法和URL代表的服务器和端口建立了一个Socket连接,返回一个可以获取数据的InputStream,允许你从服务器上下载数据。所有的头文件,跟数据无关的东西在流打开的时候都被跳过了。
public final InputStream openStream() throws IOException
使用reader或者InputStream来获取数据:
try {
URL u = new URL("http://www.amnesty.org/");
InputStream in = u.openStream();
int b;
while ((b = in.read()) != -1) {
System.out.write(b);
}
}
catch (MalformedURLException e) {System.err.println(e);}
catch (IOException e) {System.err.println(e);}
网友评论