Android文件下载功能实现代码

Android文件下载功能实现代码,第1张

概述本文实例为大家分享了Android文件下载功能的具体代码,供大家参考,具体内容如下

本文实例为大家分享了AndroID文件下载功能的具体代码,供大家参考,具体内容如下

1.普通单线程下载文件:

直接使用URLConnection.openStream()打开网络输入流,然后将流写入到文件中!

public static voID downLoad(String path,Context context)throws Exception{ URL url = new URL(path); inputStream is = url.openStream(); //截取最后的文件名 String end = path.substring(path.lastIndexOf(".")); //打开手机对应的输出流,输出到文件中 OutputStream os = context.openfileOutput("Cache_"+System.currentTimeMillis()+end,Context.MODE_PRIVATE); byte[] buffer = new byte[1024]; int len = 0; //从输入六中读取数据,读到缓冲区中 while((len = is.read(buffer)) > 0) {  os.write(buffer,len); } //关闭输入输出流 is.close(); os.close();}

2.普通多线程下载:

步骤:

@H_502_16@ 获取网络连接 本地磁盘创建相同大小的空文件 计算每条线程需从文件哪个部分开始下载,结束 依次创建,启动多条线程来下载网络资源的指定部分
public class Downloader { //添加@Test标记是表示该方法是Junit测试的方法,就可以直接运行该方法了  @Test  public voID download() throws Exception  {   //设置URL的地址和下载后的文件名   String filename = "meitu.exe";   String path = "http://10.13.20.32:8080/Test/XiuXiu_Green.exe";   URL url = new URL(path);   httpURLConnection conn = (httpURLConnection) url.openConnection();   conn.setConnectTimeout(5000);   conn.setRequestMethod("GET");   //获得需要下载的文件的长度(大小)   int filelength = conn.getContentLength();   System.out.println("要下载的文件长度"+filelength);   //生成一个大小相同的本地文件   RandomAccessfile file = new RandomAccessfile(filename,"rwd");   file.setLength(filelength);   file.close();   conn.disconnect();   //设置有多少条线程下载   int threadsize = 3;   //计算每个线程下载的量   int threadlength = filelength % 3 == 0 ? filelength/3:filelength+1;   for(int i = 0;i < threadsize;i++)   {    //设置每条线程从哪个位置开始下载    int startposition = i * threadlength;    //从文件的什么位置开始写入数据    RandomAccessfile threadfile = new RandomAccessfile(filename,"rwd");    threadfile.seek(startposition);    //启动三条线程分别从startposition位置开始下载文件    new DownLoadThread(i,startposition,threadfile,threadlength,path).start();   }   int quit = system.in.read();   while('q' != quit)   {    Thread.sleep(2000);   }  }   private class DownLoadThread extends Thread {  private int threadID;  private int startposition;  private RandomAccessfile threadfile;  private int threadlength;  private String path;  public DownLoadThread(int threadID,int startposition,RandomAccessfile threadfile,int threadlength,String path) {   this.threadID = threadID;   this.startposition = startposition;   this.threadfile = threadfile;   this.threadlength = threadlength;   this.path = path;  }  public DownLoadThread() {}  @OverrIDe  public voID run() {   try   {    URL url = new URL(path);    httpURLConnection conn = (httpURLConnection) url.openConnection();    conn.setConnectTimeout(5000);    conn.setRequestMethod("GET");    //指定从什么位置开始下载    conn.setRequestProperty("Range","bytes="+startposition+"-");    //System.out.println(conn.getResponseCode());    if(conn.getResponseCode() == 206)    {     inputStream is = conn.getinputStream();     byte[] buffer = new byte[1024];     int len = -1;     int length = 0;     while(length < threadlength && (len = is.read(buffer)) != -1)     {      threadfile.write(buffer,len);      //计算累计下载的长度      length += len;     }     threadfile.close();     is.close();     System.out.println("线程"+(threadID+1) + "已下载完成");    }   }catch(Exception ex){System.out.println("线程"+(threadID+1) + "下载出错"+ ex);}  }   }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android文件下载功能实现代码全部内容,希望文章能够帮你解决Android文件下载功能实现代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存