綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教程] android開發(7) 文件下載

[複製連結] 查看: 4480|回覆: 17|好評: 1
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
發表於 2011-7-10 10:58

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
我們在開發中經常需要從服務器下載文件,下載的內容可能有交換的信息,緩存的圖片,程序更新包等。我們使用URLConnection來實現下載。先看幾行代碼:
  1.                String urlDownload = "";
  2.                urlDownload = "http://www.baidu.com/img/baidu_sylogo1.gif";
  3.                 URL url = new URL(urlDownload );   
  4.                 // 打開連接   
  5.                 URLConnection con = url.openConnection();
  6.            
  7.                 // 輸入流   
  8.                 InputStream is = con.getInputStream();  
複製代碼

如上面的代碼所示,指定一個下載的目標鏈接,我們上面指定了一個圖片地址。然後構建一個URL對象,調用該對象的openConnection方法來建立一個數據通路(連接)。代碼的最後一行使用 con.getInputStream,拿到一個輸入流對象,通過這個流對像我們就可以讀取到這個文件的內容了。下面要做的,就是讀取這個流,將流寫入我們的本地文件。不過在這之前,我們還要說下這個方法:
  1.     //獲得文件的長度
  2.                 int contentLength = con.getContentLength();
  3.                 System.out.println("長度 :"+contentLength);
複製代碼

獲得文件長度的方法。ContentLength是不很熟啊。它是http協議裡描述頭(head)部分的描述屬性之一。實際這裡是發送了一個http請求,分析了返回(response)裡數據內容。

我們常常會把文件下載到手機的存儲卡裡,所以還會用到獲得存儲卡路徑的方法:
  1. // 獲得存儲卡路徑,構成 保存文件的目標路徑
  2.                 String dirName = "";
  3.                 dirName = Environment.getExternalStorageDirectory()+"/MyDownload/";
  4.                 File f = new File(dirName);
  5.                 if(!f.exists())
  6.                 {
  7.                     f.mkdir();
  8.                 }
複製代碼

Environment.getExternalStorageDirectory() 方法會返回一個字符串,指示了存儲卡的路徑。我們拼接字符串出一個準備存放下載文件的文件夾。並先判斷文件夾是是否存在,如果不存在,則新建一個文件夾。

做完了上面的準備後,基本就能實現下載了。我們看看主要的完整代碼。
下載前的準備工作:
  1. //要下載的文件路徑
  2. String urlDownload = "";
  3. //urlDownload =  "http://192.168.3.39/text.txt%22;
  4. urlDownload = "http://www.baidu.com/img/baidu_sylogo1.gif%22;
  5. // 獲得存儲卡路徑,構成 保存文件的目標路徑
  6. String dirName = "";
  7. dirName = Environment.getExternalStorageDirectory()+"/MyDownload/";
  8. File f = new File(dirName);
  9. if(!f.exists())
  10. {
  11.     f.mkdir();
  12. }
複製代碼

下載的操作:
  1. //準備拼接新的文件名(保存在存儲卡後的文件名)
  2.         String newFilename = _urlStr.substring(_urlStr.lastIndexOf("/")+1);
  3.         newFilename = _dirName + newFilename;
  4.         File file = new File(newFilename);
  5.         //如果目標文件已經存在,則刪除。產生覆蓋舊文件的效果
  6.         if(file.exists())
  7.         {
  8.             file.delete();
  9.         }
  10.         try {
  11.                // 構造URL   
  12.                 URL url = new URL(_urlStr);   
  13.                 // 打開連接   
  14.                 URLConnection con = url.openConnection();
  15.                 //獲得文件的長度
  16.                 int contentLength = con.getContentLength();
  17.                 System.out.println("長度 :"+contentLength);
  18.                 // 輸入流   
  19.                 InputStream is = con.getInputStream();   
  20.               
  21.                 // 1K的數據緩衝   
  22.                 byte[] bs = new byte[1024];   
  23.                 // 讀取到的數據長度   
  24.                 int len;   
  25.                // 輸出的文件流   
  26.                 OutputStream os = new FileOutputStream(newFilename);   
  27.                 // 開始讀取   
  28.                 while ((len = is.read(bs)) != -1) {   
  29.                   os.write(bs, 0, len);   
  30.                 }   
  31.                 // 完畢,關閉所有鏈接   
  32.                 os.close();   
  33.                 is.close();
  34.             
  35.         } catch (Exception e) {
  36.                 e.printStackTrace();
  37.         }
複製代碼

Demo.Download.rar (43.72 KB, 下載次數: 17)
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 10碎鑽 +1 幫助 +10 收起 理由
overfly78 + 1
winfile99 + 1 讚一個!
wangjunhai + 1 讚一個!
iinnddaa + 1 讚一個!
lendya + 1 很給力!
csm007 + 1 + 1 Great !
wayne2004 + 1 好內容。朕有賞,還不謝主隆恩.
f9999200 + 1 讚一個!
vivis611 + 1 偶像,看完你的內容,讓我找到了活著的意義.
idvtw + 1

查看全部評分

收藏收藏3 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
17
cow840911 | 收聽TA | 只看該作者
發表於 2013-6-20 22:05
謝謝大大我去試試看如何
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

16
wuyanyin | 收聽TA | 只看該作者
發表於 2013-5-28 16:37
這個一定是要學的哦!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

15
brabus1518 | 收聽TA | 只看該作者
發表於 2012-11-19 13:47
不錯,不錯
讓我有更多的收穫
謝謝你
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

14
zfstrcuta | 收聽TA | 只看該作者
發表於 2012-11-6 12:10
雖然還是有看沒有懂!哈哈
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

13
yeeeeell | 收聽TA | 只看該作者
發表於 2012-11-6 11:01
最近剛好一直在學這部分,可是一直出現問題...
希望這次能成功
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

12
myc826ywy0708 | 收聽TA | 只看該作者
發表於 2012-11-6 02:14
感謝賜教 !!!!!!!!!!!!!!!!!!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

11
iinnddaa | 收聽TA | 只看該作者
發表於 2012-10-26 07:55
謝謝版主的辛苦,這個資訊很不錯。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

10
michael0210 | 收聽TA | 只看該作者
發表於 2012-10-24 11:22
不得不說分享的內容實在是太優了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則