在网络中下载某个文件资源的方法有很多种,基于HTTP协议的是其中常用的一种。http从网络中下载文件简单的说主要有三个步骤:
1.客户端根据确定访问资源的URL向它所在的服务器发出连接请求。
2.与服务器连接成功(过程中判断权限、网络环境等条件)。
3.开始下载文件(流读取、存储等等)。
Java实现的代码如下所示:
StringBuffer sb = new StringBuffer(); //存放下载的文件序列
String line = null;
BufferedReader buffer = null;
// 创建一个URL对象
URL url = new URL(urlString);
// 创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 使用IO流读取数据
buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
buffer.close();
return sb.toString(); //返回文件字符串序列
这里需要注意的是,创建URL对象、尝试打开网络连接、读取IO流操作以及最后的关闭流的代码都要放在try-catch语句中分别进行异常处理,否则编译不会通过。最后读取流完毕后要关闭连接关闭IO流。返回的文件字符串不用写入文件存储,要用于后续处理,一般这种方式常用在需要马上对下载的字符流数据进行处理,例如XML文件解析、JSON数据下载解析等。
再补充一点,忽略了个问题,纠结半天的利用BufferedReader下载视频、音频、apk等文件时总是下载不完整,奇怪的是不管下多大的文件,(文件过大放入StringBuffer不写入存储设备会导致OutOfMemory错误),我每次测试都是下载到实际大小的93%就停止了,导致下载文件不完整。BufferedReader只是针对字符流的便捷方法,因为它有readLine方法可以每次读取一行,但是对于字节流或二进制流等,读取就会出现问题,应该采用BufferedInputStream流来读取文件。