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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值