抽象类 URLConnection
是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:
openConnection() | connect() |
---|---|
对影响到远程资源连接的参数进行操作。 | 与资源交互;查询头字段和内容。 |
时间
- 通过在 URL 上调用
openConnection
方法创建连接对象。 - 处理设置参数和一般请求属性。
- 使用
connect
方法建立到远程对象的实际连接。 - 远程对象变为可用。远程对象的头字段和内容变为可访问。
使用以下方法修改设置参数:
setAllowUserInteraction
setDoInput
setDoOutput
setIfModifiedSince
setUseCaches
使用以下方法修改一般请求属性:
setRequestProperty
使用 setDefaultAllowUserInteraction
和 setDefaultUseCaches
可设置 AllowUserInteraction
和 UseCaches
参数的默认值。
上面每个 set
方法都有一个用于获取参数值或一般请求属性值的对应 get
方法。适用的具体参数和一般请求属性取决于协议。
在建立到远程对象的连接后,以下方法用于访问头字段和内容:
getContent
getHeaderField
getInputStream
getOutputStream
某些头字段需要经常访问。以下方法:
getContentEncoding
getContentLength
getContentType
getDate
getExpiration
getLastModifed
提供对这些字段的便捷访问。getContent
方法使用 getContentType
方法以确定远程对象类型;子类重写 getContentType
方法很容易。
一般情况下,所有的预连接参数和一般请求属性都可忽略:预连接参数和一般请求属性默认为敏感值。对于此接口的大多数客户端而言,只有两个需要的方法:getInputStream
和 getContent
,它们通过便捷方法镜像到 URL
类中。
示例:
public void down() throws Exception{
//1.声明url
URL url = new URL("http://localhost:8080/0515/down/01.avi");
//2.获取urlconnection
HttpURLConnection con = (HttpURLConnection)url.openConnection();
//3.设置请求类型
con.setRequestMethod("GET");
//4.设置可以读写服务器的数据
con.setDoInput(true);
con.setDoOutput(true);
//5.连接
con.connect();
//6.判断是否连接成功
int code = con.getResponseCode();
if(code==200){
//获取服务器上要下载的数据是多少
int contentLength =con.getContentLength();
System.err.println("大小:"+contentLength);
//7.读取服务器返回的io
InputStream in = con.getInputStream();
byte[] b = newbyte[1024*256];
int len = 0;
int sum = 0;//下载总量
OutputStream out = new FileOutputStream("f:/01.avi");
while((len=in.read(b))!=-1){
sum+=len;
out.write(b,0, len);
System.err.println(sum+"/"+contentLength);
}
out.close();
in.close();
}
con.disconnect();
}