Android基于HttpUrlConnection类的文件下载实例代码
作者:何叫兽 发布时间:2022-08-28 02:18:49
标签:android,文件下载,httpurlconnection
废话不多说了,直接给大家贴代码了,具体代码如所示:
/**
* get方法的文件下载
* <p>
* 特别说明 android中的progressBar是google唯一的做了处理的可以在子线程中更新UI的控件
*
* @param path
*/
private void httpDown(final String path) {
new Thread() {
@Override
public void run() {
URL url;
HttpURLConnection connection;
try {
//统一资源
url = new URL(path);
//打开链接
connection = (HttpURLConnection) url.openConnection();
//设置链接超时
connection.setConnectTimeout(4000);
//设置允许得到服务器的输入流,默认为true可以不用设置
connection.setDoInput(true);
//设置允许向服务器写入数据,一般get方法不会设置,大多用在post方法,默认为false
connection.setDoOutput(true);//此处只是为了方法说明
//设置请求方法
connection.setRequestMethod("GET");
//设置请求的字符编码
connection.setRequestProperty("Charset", "utf-8");
//设置connection打开链接资源
connection.connect();
//得到链接地址中的file路径
String urlFilePath = connection.getURL().getFile();
//得到url地址总文件名 file的separatorChar参数表示文件分离符
String fileName = urlFilePath.substring(urlFilePath.lastIndexOf(File.separatorChar) + 1);
//创建一个文件对象用于存储下载的文件 此次的getFilesDir()方法只有在继承至Context类的类中
// 可以直接调用其他类中必须通过Context对象才能调用,得到的是内部存储中此应用包名下的文件路径
//如果使用外部存储的话需要添加文件读写权限,5.0以上的系统需要动态获取权限 此处不在不做过多说明。
File file = new File(getFilesDir(), fileName);
//创建一个文件输出流
FileOutputStream outputStream = new FileOutputStream(file);
//得到链接的响应码 200为成功
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
//得到服务器响应的输入流
InputStream inputStream = connection.getInputStream();
//获取请求的内容总长度
int contentLength = connection.getContentLength();
//设置progressBar的Max
mPb.setMax(contentLength);
//创建缓冲输入流对象,相对于inputStream效率要高一些
BufferedInputStream bfi = new BufferedInputStream(inputStream);
//此处的len表示每次循环读取的内容长度
int len;
//已经读取的总长度
int totle = 0;
//bytes是用于存储每次读取出来的内容
byte[] bytes = new byte[1024];
while ((len = bfi.read(bytes)) != -1) {
//每次读取完了都将len累加在totle里
totle += len;
//每次读取的都更新一次progressBar
mPb.setProgress(totle);
//通过文件输出流写入从服务器中读取的数据
outputStream.write(bytes, 0, len);
}
//关闭打开的流对象
outputStream.close();
inputStream.close();
bfi.close();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "下载完成!", Toast.LENGTH_SHORT).show();
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
总结
以上所述是小编给大家介绍的Android基于HttpUrlConnection类的文件下载实例代码网站的支持!
来源:http://www.cnblogs.com/hejiaoshou/archive/2017/09/01/7463318.html
0
投稿
猜你喜欢
- 当我们在windows系统下安装完jdk时,测试案例HelloWorld;运行java命令时报错:找不到或无法加载主类解决方法:1.首先检查
- ViewPager2 介绍ViewPager2 是基于 RecyclerView 重新编写的 ViewPager,比原有的 ViewPage
- 一,Java Object Serialization1,什么是序列化(Serialization)序列化是指将结构化对象转化为字节流以便在
- Eureka什么是服务治理为什么需要服务治理?  服务治理是主要针对分布式服务框架的微服务,处理服务调用
- 功能描述1、创建扑克牌。包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王。2、创建两个玩家。包括玩家
- 自从接触javascript以来,对this参数的理解一直是模棱两可。虽有过深入去理解,但却也总感觉是那种浮于表面,没有完全理清头绪。但对于
- 单例模式单例模式顾名思义就是单一的实例,涉及到一个单一的类,该类负责创建自己的对象,同时确保只有一个对象被创建,并且提供一种可以访问这个对象
- 下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试。1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程
- 前言近期一直在忙项目,我也是打工仔。不多说,我们开始玩一玩seata。什么都不说,我们按照惯例,先上一个图(图里不规范的使用请忽略):简单一
- 本文实例讲述了Java链表中元素删除的实现方法。分享给大家供大家参考,具体如下:该部分与上一节是息息相关的,关于如何在链表中删除元素,我们一
- “Java is still not dead—and people are starting to figure that out.”本教
- 一、获取android工程里面的各种资源的id; 1.1 string型 比如下面: << string name=”OK”&g
- 在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 S
- Spring Cloud Gateway是Spring 官方基于Spring 5.0、Spring Boot 2.0和Project Rea
- @Aspect中有5种通知@Before:前置通知, 在方法执行之前执行@Aroud:环绕通知, 围绕着方法执行@After:后置通知, 在
- 基本用法不说了,网上例子很多,这里主要介绍下比较特殊情况下使用的方法。1. 分组有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下
- 本文较为详细的分析了Java反射机制。分享给大家供大家参考,具体如下:一、预先需要掌握的知识(java虚拟机) java虚拟机的方法区:ja
- Redis不仅可作为缓存服务器,还可以用作消息队列。它的列表类型天生支持用作消息队列。如下图所示:由于Redis的列表是使用双向链表实现的,
- 我这里 shiro 并没有集成 springMVC,直接使用 ini 配置文件。shiro.ini[main]# Objects and t
- 相应的类库可在我的资源页面中找到,关于类成员的说明可通过对象浏览器查看函数说明Imports BitOperatorLibrary.Shif