HttpURLConnection----利用接口回调和多线程进行简单的文件下载

2024-05-27 05:08

本文主要是介绍HttpURLConnection----利用接口回调和多线程进行简单的文件下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    首先需要说明的是在这里的下载使用的是内存流,所以每次下载的数据不宜过大,只适合小文件的下载实现!
    一、我们定义一个FileDownload的工具类,继承Thread实现多线程同时下载,在工具类中,提供一个静态的构造方法( 当然,非静态也没有什么不可 )--- download ( String path , File file , CallBack callback ) ,在这个方法中,需要传入三个参数,一个是下载的路径,一个是需要存储的File路径,还有一个借口对象!在这个方法中,我们将使用HttpURLConnection获取网络文件资源,再通过获取输入流将得到的流存储到本地磁盘!
    二、在对文件的下载处理上,我们首先将得到的流下载并存入到内存当中,然后再从内存当中获取数据存到本地!
    三、在重写的run()方法中调用下载文件的方法,开辟一个新的线程通道等待下载。
    四、在main方法中创建两个文件对象,给出两个文件下载路径,开启新的线程就可以进行下载操作!一个mp3文件和一个图片文件!
   
public class TestHttpDownload {
 
public static void main(String[] args) {
File file = new File("E:/mp3/阴天.mp3");
String path = "http://42.48.1.37/ws.cdn.baidupcs.com/file/99a4e607e646121d1d22dca8020b6787?bkt=p2-qd-344&xcode=48efb5d0699a3b5c0fe59fd12e82e7bf4a84c3a1243b47750047804bae6a1ada&fid=2337020227-250528-254719956965863&time=1439988143&sign=FDTAXERLBH-DCb740ccc5511e5e8fedcff06b081203-cKzHcw0jxiQZ2gf5%2B%2F0%2Fx%2F0pmqQ%3D&to=hc&fm=Nan,B,U,nc&sta_dx=4&sta_cs=3938&sta_ft=mp3&sta_ct=7&fm2=Nanjing,B,U,nc&newver=1&newfm=1&secfm=1&flow_ver=3&sl=77135951&expires=8h&rt=sh&r=600114904&mlogid=2299306147&vuk=220819842&vbdid=1352670736&fin=%E9%98%B4%E5%A4%A9.mp3&fn=%E9%98%B4%E5%A4%A9.mp3&slt=pm&uta=0&rtype=1&iv=0&isw=0&wshc_tag=0&wsts_tag=55d479b2&wsid_tag=7139aa92&wsiphost=ipdbm";
File file1 = new File("E:/img/5.jpg");
String path1 = "http://www.keaitupian.com/uploads/090821/1_164315_1.jpg";
new FileDownload(file, path, new CallBack() {
@Override
public void result(String str) {
System.out.println(str);
}
}).start();
new FileDownload(file1, path1, new CallBack() {
@Override
public void result(String str) {
System.out.println(str);
}
}).start();
}
}
class FileDownload extends Thread{
File file = null;
String path = null;
CallBack callback = null;
public FileDownload(File file, String path,CallBack callback) {
this.file = file;
this.path = path;
this.callback = callback;
}
public static void download(String path,File file,CallBack callback){
URL url = null;
HttpURLConnection conn = null;
FileOutputStream fos = null;
try {
url = new URL(path);
conn = (HttpURLConnection) url.openConnection();
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
//成功
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
byte[] b = new byte[128];
int len = 0;
while((len = bis.read(b))!=-1){
bos.write(b,0,len);
bos.flush();
}
fos = new FileOutputStream(file);
fos.write(bos.toByteArray());
callback.result("下载"+url.getFile()+"完毕!");
fos.close();
bos.close();
bis.close();
}
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
download(path, file, callback);
}
}
interface CallBack{
void result(String str);
}

这篇关于HttpURLConnection----利用接口回调和多线程进行简单的文件下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006580

相关文章

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现