在Android 开发中,我们肯定会接触到下载需求,那么如何通过技术实现呢?

一、简单实现:

通过了解HTTP原理,我们应该可以知道,HTTP学习的时候,可以通过HTTPGET方式来进行文件下载:

new Thread(new Runnable() {

    @Override
public void run() {
String fileName = url.substring(url.lastIndexOf("/") + 1);
// 如果不是,就加尾缀
if (!fileName.endsWith(MimeUtils.guessExtensionFromMimeType(mimetype))) {
fileName = fileName + "." + MimeUtils.guessExtensionFromMimeType(mimetype);
}
// 限制文件名的长度
if (fileName.length() > 50) {
fileName = fileName.substring(fileName.length() - 50);
}
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 5 * 1000);
HttpConnectionParams.setSoTimeout(params, 5 * 1000);
HttpGet httpGet = new HttpGet(url);
try {
File file = new File(Environment.getExternalStorageDirectory(), fileName);
if (!file.exists()) {
file.createNewFile();
} else {
boolean flag = file.delete();
if (flag) {
file.createNewFile();
} else {
// 目前设定是: 如果删除失败,就不进行下载了
            return;
}
}
RandomAccessFile randomFile = new RandomAccessFile(file, "rw");
HttpResponse response = new DefaultHttpClient(params).execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream in = entity.getContent();
randomFile.seek(randomFile.length());
byte[] buffer = new byte[1024];
int lenght = 0;
while ((lenght = in.read(buffer)) > 0) {
randomFile.write(buffer, 0, lenght);
if (randomFile.length() == contentLength) {
// 下载完成
}
}
randomFile.close();
httpGet.abort();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();

最新文章

  1. dede 简略标题调用标签
  2. html2canvas根据DOM元素样式实现网页截图
  3. Android Service学习之AIDL, Parcelable和远程服务
  4. 微软职位内部推荐-SDE
  5. 转 mybatis javaType与jdbcType对应
  6. InvalidateRect和UpdateWindow
  7. 转载——yum源的超级简单配置
  8. 洛谷U19464 山村游历(Wander)(LCT,Splay)
  9. K8s helm 创建自定义Chart
  10. JAVA面对对象(一)——封装
  11. 老徐FrankXuLei 受邀为花旗银行讲授《微软WCF服务分布式开发与SOA架构设计课程》
  12. Storm实现实时大数据分析
  13. Devexpres下LookUpEdit绑定数据后会默认弹出数据框的解决办法
  14. Spring Boot系列教程二:创建第一个web工程 hello world
  15. Andorid之Annotation框架初使用(二)
  16. Install certificates needed for Visual Studio offline installation
  17. 每天多学一个Linux命令--man
  18. 改修jquery支持cmd规范的seajs
  19. 【OpenGL ES】关于VBO(Vertex Buffer Object)的一些坑——解析一些关于glBuffer的函数
  20. Triangulation by Ear Clipping(耳切法处理多边形三角划分)

热门文章

  1. python_05 可变类型与不可变类型、集合、字符串格式化
  2. RK3288 mipi屏参数配置文件
  3. shell多个脚本怎么并发执行
  4. mvc中view与controll之间传递参数时,可以使用url进行传递
  5. 【FZSZ2017暑假提高组Day1】确定小组
  6. python 迭代多个对象
  7. 初学c# -- 纯属无聊,写下棋
  8. [leetcode]55. Jump Game青蛙跳(能否跳到终点)
  9. Js学习(7)标准库-object对象
  10. zeromq学习记录(四)使用ZMQ_ROUTER ZMQ_DEALER