文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android中怎么实现文件下载功能

2023-05-31 00:37

关注

今天就跟大家聊聊有关Android中怎么实现文件下载功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

普通单线程下载文件:

直接使用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,0,len); } //关闭输入输出流 is.close(); os.close();}

普通多线程下载:

步骤:

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,0,len);      //计算累计下载的长度      length += len;     }     threadfile.close();     is.close();     System.out.println("线程"+(threadid+1) + "已下载完成");    }   }catch(Exception ex){System.out.println("线程"+(threadid+1) + "下载出错"+ ex);}  }   }}

看完上述内容,你们对Android中怎么实现文件下载功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯