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

相关文章

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编