溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在android中實(shí)現(xiàn)一個(gè)文件下載功能

發(fā)布時(shí)間:2021-03-08 14:15:58 來源:億速云 閱讀:144 作者:Leah 欄目:移動(dòng)開發(fā)

本篇文章為大家展示了怎么在android中實(shí)現(xiàn)一個(gè)文件下載功能,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

步驟 : 

1.使用HTTP協(xié)議下載文件

- 創(chuàng)建一個(gè)HttpURLConnection對(duì)象 : HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
- 獲取一個(gè)InputStream對(duì)象 : urlConn.getInputStream()
- 訪問網(wǎng)絡(luò)的權(quán)限 : android.permission.INTERNET

2.將下載的文件寫入SDCARD
- 得到當(dāng)前設(shè)備SD卡的目錄 : Environment.getExternalStrageDirectory()
- 訪問SD卡的權(quán)限 : android.permission.WRITE_EXTERNAL_STORAGE

代碼 : 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:paddingBottom="@dimen/activity_vertical_margin" 
  android:paddingLeft="@dimen/activity_horizontal_margin" 
  android:paddingRight="@dimen/activity_horizontal_margin" 
  android:paddingTop="@dimen/activity_vertical_margin" 
  tools:context=".MainActivity" > 
 
  <Button 
    android:id="@+id/btn_txt" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="download lrc" /> 
   
  <Button 
    android:id="@+id/btn_mp3" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/btn_txt" 
    android:text="download mp3" /> 
 
</RelativeLayout>

MainActivity.java

package com.chay.download; 
 
import com.chay.utils.HttpDownloader; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
 
public class MainActivity extends Activity { 
   
  String urlStr_txt = "http://192.168.56.1:8080/mp3/wan.lrc"; 
  String urlStr_mp3 = "http://192.168.56.1:8080/mp3/wan.mp3"; 
  String path = "mp3/"; 
  String fileName = "wan.mp3"; 
  private Button downloadTxtButton; 
  private Button downloadMp3Button; 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    downloadTxtButton = (Button) findViewById(R.id.btn_txt); 
    downloadTxtButton.setOnClickListener(new DownloadTxtListener()); 
    downloadMp3Button = (Button) findViewById(R.id.btn_mp3); 
    downloadMp3Button.setOnClickListener(new DownloadMp3Listener()); 
  } 
 
  //下載歌詞文件按鈕監(jiān)聽器 
  class DownloadTxtListener implements OnClickListener { 
    @Override 
    public void onClick(View v) { 
      Thread t = new DownloadTxtThread();  
      t.start(); 
      System.out.println("txt--->"); 
    } 
  } 
  //下載歌詞文件線程 
  class DownloadTxtThread extends Thread{ 
    @Override 
    public void run() { 
      HttpDownloader httpDownloader = new HttpDownloader(); 
      String lrc = httpDownloader.download(urlStr_txt); 
      System.out.println(lrc); 
    } 
  } 
  //下載MP3文件按鈕監(jiān)聽器 
  class DownloadMp3Listener implements OnClickListener { 
    @Override 
    public void onClick(View v) { 
      Thread h = new DownMp3Thread(); 
      h.start(); 
      System.out.println("mp3--->"); 
    } 
  } 
  //下載MP3文件線程 
  class DownMp3Thread extends Thread{ 
    @Override 
    public void run() { 
      HttpDownloader httpDownloader = new HttpDownloader(); 
      int result = httpDownloader.downFile(urlStr_mp3, path, fileName); 
      System.out.println(result); 
    } 
  }   
}

工具類:

HttpDownloader.java

package com.chay.utils; 
 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
 
public class HttpDownloader { 
  private URL url = null; 
 
  /** 
   * 根據(jù)URL下載文件,前提是這個(gè)文件當(dāng)中的內(nèi)容是文本,函數(shù)的返回值就是文件當(dāng)中的內(nèi)容 
   * 1.創(chuàng)建一個(gè)URL對(duì)象 
   * 2.通過URL對(duì)象,創(chuàng)建一個(gè)HttpURLConnection對(duì)象 
   * 3.得到InputStram 
   * 4.從InputStream當(dāng)中讀取數(shù)據(jù) 
   * @param urlStr 
   * @return 
   */ 
  public String download(String urlStr) { 
    StringBuffer sb = new StringBuffer(); 
    String line = null; 
    BufferedReader buffer = null; 
    try { 
      // 創(chuàng)建一個(gè)URL對(duì)象 
      url = new URL(urlStr); 
      // 創(chuàng)建一個(gè)Http連接 
      HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 
      // 使用IO流讀取數(shù)據(jù) 
      buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 
      while ((line = buffer.readLine()) != null) { 
        sb.append(line); 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } finally { 
      try { 
        buffer.close(); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
    return sb.toString(); 
  } 
 
  /** 
   * 該函數(shù)返回整形 -1:代表下載文件出錯(cuò)   0:代表下載文件成功   1:代表文件已經(jīng)存在 
   */ 
  public int downFile(String urlStr, String path, String fileName) { 
    InputStream inputStream = null; 
    try { 
      FileUtils fileUtils = new FileUtils(); 
       
      if (fileUtils.isFileExist(path + fileName)) { 
        return 1; 
      } else { 
        inputStream = getInputStreamFromUrl(urlStr); 
        File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream); 
        if (resultFile == null) { 
          return -1; 
        } 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 
      return -1; 
    } finally { 
      try { 
        inputStream.close(); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
    return 0; 
  } 
 
  /** 
   * 根據(jù)URL得到輸入流 
   * 
   * @param urlStr 
   * @return 
   * @throws MalformedURLException 
   * @throws IOException 
   */ 
  public InputStream getInputStreamFromUrl(String urlStr) 
      throws MalformedURLException, IOException { 
    url = new URL(urlStr); 
    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 
    InputStream inputStream = urlConn.getInputStream(); 
    return inputStream; 
  } 
}

FileUtils.java

package com.chay.utils; 
 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import android.os.Environment; 
 
public class FileUtils { 
  private String SDPATH; 
 
  public String getSDPATH() { 
    return SDPATH; 
  } 
  public FileUtils() { 
    //得到當(dāng)前外部存儲(chǔ)設(shè)備的目錄 
    // /SDCARD 
    SDPATH = Environment.getExternalStorageDirectory() + "/"; 
  } 
  /** 
   * 在SD卡上創(chuàng)建文件 
   * 
   * @throws IOException 
   */ 
  public File creatSDFile(String fileName) throws IOException { 
    File file = new File(SDPATH + fileName); 
    file.createNewFile(); 
    return file; 
  } 
   
  /** 
   * 在SD卡上創(chuàng)建目錄 
   * 
   * @param dirName 
   */ 
  public File creatSDDir(String dirName) { 
    File dir = new File(SDPATH + dirName); 
    dir.mkdirs(); 
    return dir; 
  } 
 
  /** 
   * 判斷SD卡上的文件夾是否存在 
   */ 
  public boolean isFileExist(String fileName){ 
    File file = new File(SDPATH + fileName); 
    return file.exists(); 
  } 
   
  /** 
   * 將一個(gè)InputStream里面的數(shù)據(jù)寫入到SD卡中 
   */ 
  public File write2SDFromInput(String path,String fileName,InputStream input){ 
    File file = null; 
    OutputStream output = null; 
    try{ 
      creatSDDir(path); 
      file = creatSDFile(path + fileName); 
      output = new FileOutputStream(file); 
      byte buffer [] = new byte[4 * 1024]; 
      while((input.read(buffer)) != -1){ 
        output.write(buffer); 
      } 
      output.flush(); 
    } 
    catch(Exception e){ 
      e.printStackTrace(); 
    } 
    finally{ 
      try{ 
        output.close(); 
      } 
      catch(Exception e){ 
        e.printStackTrace(); 
      } 
    } 
    return file; 
  } 
}

怎么在android中實(shí)現(xiàn)一個(gè)文件下載功能

上述內(nèi)容就是怎么在android中實(shí)現(xiàn)一個(gè)文件下載功能,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI