Android基于HttpUrlConnection类的文件下载实例代码

发布时间 - 2026-01-11 03:04:27    点击率:

废话不多说了,直接给大家贴代码了,具体代码如所示:

/**
   * get方法的文件下载
   * <p>
   * 特别说明 android中的progressBar是google唯一的做了处理的可以在子线程中更新UI的控件
   *
   * @param path
   */
  private void httpDown(final String path) {
    new Thread() {
      @Override
      public void run() {
        URL url;
        HttpURLConnection connection;
        try {
          //统一资源
          url = new URL(path);
          //打开链接
          connection = (HttpURLConnection) url.openConnection();
          //设置链接超时
          connection.setConnectTimeout(4000);
          //设置允许得到服务器的输入流,默认为true可以不用设置
          connection.setDoInput(true);
          //设置允许向服务器写入数据,一般get方法不会设置,大多用在post方法,默认为false
          connection.setDoOutput(true);//此处只是为了方法说明
          //设置请求方法
          connection.setRequestMethod("GET");
          //设置请求的字符编码
          connection.setRequestProperty("Charset", "utf-8");
          //设置connection打开链接资源
          connection.connect();
          //得到链接地址中的file路径
          String urlFilePath = connection.getURL().getFile();
          //得到url地址总文件名 file的separatorChar参数表示文件分离符
          String fileName = urlFilePath.substring(urlFilePath.lastIndexOf(File.separatorChar) + 1);
          //创建一个文件对象用于存储下载的文件 此次的getFilesDir()方法只有在继承至Context类的类中
          // 可以直接调用其他类中必须通过Context对象才能调用,得到的是内部存储中此应用包名下的文件路径
          //如果使用外部存储的话需要添加文件读写权限,5.0以上的系统需要动态获取权限 此处不在不做过多说明。
          File file = new File(getFilesDir(), fileName);
          //创建一个文件输出流
          FileOutputStream outputStream = new FileOutputStream(file);
          //得到链接的响应码 200为成功
          int responseCode = connection.getResponseCode();
          if (responseCode == HttpURLConnection.HTTP_OK) {
            //得到服务器响应的输入流
            InputStream inputStream = connection.getInputStream();
            //获取请求的内容总长度
            int contentLength = connection.getContentLength();
            //设置progressBar的Max
            mPb.setMax(contentLength);
            //创建缓冲输入流对象,相对于inputStream效率要高一些
            BufferedInputStream bfi = new BufferedInputStream(inputStream);
            //此处的len表示每次循环读取的内容长度
            int len;
            //已经读取的总长度
            int totle = 0;
            //bytes是用于存储每次读取出来的内容
            byte[] bytes = new byte[1024];
            while ((len = bfi.read(bytes)) != -1) {
              //每次读取完了都将len累加在totle里
              totle += len;
              //每次读取的都更新一次progressBar
              mPb.setProgress(totle);
              //通过文件输出流写入从服务器中读取的数据
              outputStream.write(bytes, 0, len);
            }
            //关闭打开的流对象
            outputStream.close();
            inputStream.close();
            bfi.close();
            runOnUiThread(new Runnable() {
              @Override
              public void run() {
                Toast.makeText(MainActivity.this, "下载完成!", Toast.LENGTH_SHORT).show();
              }
            });
          }
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }.start();
  }

总结

以上所述是小编给大家介绍的Android基于HttpUrlConnection类的文件下载实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # 文件下载  # httpurlconnection  # Android HttpURLConnection下载网络图片设置系统壁纸  # Android 用HttpURLConnection访问网络的方法  # Android网络技术HttpURLConnection详解  # Android程序开发通过HttpURLConnection上传文件到服务器  # Android 中HttpURLConnection与HttpClient使用的简单实例  # Android HttpURLConnection.getResponseCode()错误解决方法  # Android使用HttpURLConnection实现网络访问流程  # 给大家  # 创建一个  # 小编  # 类中  # 的是  # 默认为  # 总长度  # 在此  # 说了  # 不多  # 都将  # 不做  # 所示  # 相对于  # 用在  # 所述  # 给我留言  # 感谢大家  # 高一些  # 疑问请 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  企业网站制作这些问题要关注  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  如何快速辨别茅台真假?关键步骤解析  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  新三国志曹操传主线渭水交兵攻略  如何实现javascript表单验证_正则表达式有哪些实用技巧  焦点电影公司作品,电影焦点结局是什么?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  魔方云NAT建站如何实现端口转发?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何在Windows虚拟主机上快速搭建网站?  详解CentOS6.5 安装 MySQL5.1.71的方法  EditPlus中的正则表达式 实战(2)  如何快速配置高效服务器建站软件?  如何用西部建站助手快速创建专业网站?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  如何在新浪SAE免费搭建个人博客?  中山网站推广排名,中山信息港登录入口?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  网站页面设计需要考虑到这些问题  Python制作简易注册登录系统  如何在自有机房高效搭建专业网站?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  大连 网站制作,大连天途有线官网?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  ,在苏州找工作,上哪个网站比较好?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  重庆市网站制作公司,重庆招聘网站哪个好?  如何快速上传自定义模板至建站之星?  Laravel如何实现模型的全局作用域?(Global Scope示例)  QQ浏览器网页版登录入口 个人中心在线进入  昵图网官网入口 昵图网素材平台官方入口  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何在服务器上三步完成建站并提升流量?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  BootStrap整体框架之基础布局组件  再谈Python中的字符串与字符编码(推荐)  如何在搬瓦工VPS快速搭建网站?