Android 经验之文件下载
2024-09-10 18:43:42
在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();
最新文章
- dede 简略标题调用标签
- html2canvas根据DOM元素样式实现网页截图
- Android Service学习之AIDL, Parcelable和远程服务
- 微软职位内部推荐-SDE
- 转 mybatis javaType与jdbcType对应
- InvalidateRect和UpdateWindow
- 转载——yum源的超级简单配置
- 洛谷U19464 山村游历(Wander)(LCT,Splay)
- K8s helm 创建自定义Chart
- JAVA面对对象(一)——封装
- 老徐FrankXuLei 受邀为花旗银行讲授《微软WCF服务分布式开发与SOA架构设计课程》
- Storm实现实时大数据分析
- Devexpres下LookUpEdit绑定数据后会默认弹出数据框的解决办法
- Spring Boot系列教程二:创建第一个web工程 hello world
- Andorid之Annotation框架初使用(二)
- Install certificates needed for Visual Studio offline installation
- 每天多学一个Linux命令--man
- 改修jquery支持cmd规范的seajs
- 【OpenGL ES】关于VBO(Vertex Buffer Object)的一些坑——解析一些关于glBuffer的函数
- Triangulation by Ear Clipping(耳切法处理多边形三角划分)
热门文章
- python_05 可变类型与不可变类型、集合、字符串格式化
- RK3288 mipi屏参数配置文件
- shell多个脚本怎么并发执行
- mvc中view与controll之间传递参数时,可以使用url进行传递
- 【FZSZ2017暑假提高组Day1】确定小组
- python 迭代多个对象
- 初学c# -- 纯属无聊,写下棋
- [leetcode]55. Jump Game青蛙跳(能否跳到终点)
- Js学习(7)标准库-object对象
- zeromq学习记录(四)使用ZMQ_ROUTER ZMQ_DEALER