中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么利用HttpUrlConnection類下載文件

發布時間:2021-06-26 17:14:31 來源:億速云 閱讀:354 作者:Leah 欄目:移動開發

Android中怎么利用HttpUrlConnection類下載文件,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

具體代碼如所示:

/**
   * 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();
  }

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐昌市| 麻城市| 黔西县| 汝南县| 渑池县| 洞头县| 营口市| 裕民县| 沂水县| 石柱| 龙川县| 衡阳县| 法库县| 乡城县| 宁都县| 夹江县| 遵化市| 湖南省| 康保县| 枣强县| 慈溪市| 黎川县| 三明市| 邓州市| 新安县| 保康县| 菏泽市| 从化市| 台前县| 巴彦淖尔市| 江门市| 正蓝旗| 靖远县| 新宾| 瑞丽市| 宝兴县| 颍上县| 太仆寺旗| 富裕县| 景谷| 饶河县|