android_檔案下載

來源:互聯網
上載者:User

android_檔案下載

android 在網路上下載檔案

步驟 :

1.使用HTTP協議下載檔案

- 建立一個HttpURLConnection對象 : HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

- 擷取一個InputStream對象 : urlConn.getInputStream()

- 訪問網路的許可權 : android.permission.INTERNET

2.將下載的檔案寫入SDCARD

- 得到當前裝置SD卡的目錄 : Environment.getExternalStrageDirectory()

- 訪問SD卡的許可權 : android.permission.WRITE_EXTERNAL_STORAGE

代碼 :

activity_main.xml

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;@Overrideprotected 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());}//下載歌詞檔案按鈕監聽器class DownloadTxtListener implements OnClickListener {@Overridepublic void onClick(View v) {Thread t = new DownloadTxtThread();              t.start();            System.out.println("txt--->");}}//下載歌詞檔案線程class DownloadTxtThread extends Thread{@Overridepublic void run() {HttpDownloader httpDownloader = new HttpDownloader();String lrc = httpDownloader.download(urlStr_txt);System.out.println(lrc);}}//下載MP3檔案按鈕監聽器class DownloadMp3Listener implements OnClickListener {@Overridepublic void onClick(View v) {Thread h = new DownMp3Thread();h.start();System.out.println("mp3--->");}}//下載MP3檔案線程class DownMp3Thread extends Thread{@Overridepublic 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;/** * 根據URL下載檔案,前提是這個檔案當中的內容是文本,函數的傳回值就是檔案當中的內容 * 1.建立一個URL對象 * 2.通過URL對象,建立一個HttpURLConnection對象 * 3.得到InputStram * 4.從InputStream當中讀取資料 * @param urlStr * @return */public String download(String urlStr) {StringBuffer sb = new StringBuffer();String line = null;BufferedReader buffer = null;try {// 建立一個URL對象url = new URL(urlStr);// 建立一個Http串連HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();// 使用IO流讀取資料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();}/** * 該函數返回整形 -1:代表下載檔案出錯      0:代表下載檔案成功      1:代表檔案已經存在 */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;}/** * 根據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() {//得到當前外部存放裝置的目錄// /SDCARDSDPATH = Environment.getExternalStorageDirectory() + "/";}/** * 在SD卡上建立檔案 *  * @throws IOException */public File creatSDFile(String fileName) throws IOException {File file = new File(SDPATH + fileName);file.createNewFile();return file;}/** * 在SD卡上建立目錄 *  * @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();}/** * 將一個InputStream裡面的資料寫入到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;}}
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.