Android基于HttpUrlConnection類的文件下載實(shí)例代碼
廢話不多說(shuō)了,直接給大家貼代碼了,具體代碼如所示:
/**
* get方法的文件下載
* <p>
* 特別說(shuō)明 android中的progressBar是google唯一的做了處理的可以在子線程中更新UI的控件
*
* @param path
*/
private void httpDown(final String path) {
new Thread() {
@Override
public void run() {
URL url;
HttpURLConnection connection;
try {
//統(tǒng)一資源
url = new URL(path);
//打開(kāi)鏈接
connection = (HttpURLConnection) url.openConnection();
//設(shè)置鏈接超時(shí)
connection.setConnectTimeout(4000);
//設(shè)置允許得到服務(wù)器的輸入流,默認(rèn)為true可以不用設(shè)置
connection.setDoInput(true);
//設(shè)置允許向服務(wù)器寫(xiě)入數(shù)據(jù),一般get方法不會(huì)設(shè)置,大多用在post方法,默認(rèn)為false
connection.setDoOutput(true);//此處只是為了方法說(shuō)明
//設(shè)置請(qǐng)求方法
connection.setRequestMethod("GET");
//設(shè)置請(qǐng)求的字符編碼
connection.setRequestProperty("Charset", "utf-8");
//設(shè)置connection打開(kāi)鏈接資源
connection.connect();
//得到鏈接地址中的file路徑
String urlFilePath = connection.getURL().getFile();
//得到url地址總文件名 file的separatorChar參數(shù)表示文件分離符
String fileName = urlFilePath.substring(urlFilePath.lastIndexOf(File.separatorChar) + 1);
//創(chuàng)建一個(gè)文件對(duì)象用于存儲(chǔ)下載的文件 此次的getFilesDir()方法只有在繼承至Context類的類中
// 可以直接調(diào)用其他類中必須通過(guò)Context對(duì)象才能調(diào)用,得到的是內(nèi)部存儲(chǔ)中此應(yīng)用包名下的文件路徑
//如果使用外部存儲(chǔ)的話需要添加文件讀寫(xiě)權(quán)限,5.0以上的系統(tǒng)需要?jiǎng)討B(tài)獲取權(quán)限 此處不在不做過(guò)多說(shuō)明。
File file = new File(getFilesDir(), fileName);
//創(chuàng)建一個(gè)文件輸出流
FileOutputStream outputStream = new FileOutputStream(file);
//得到鏈接的響應(yīng)碼 200為成功
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
//得到服務(wù)器響應(yīng)的輸入流
InputStream inputStream = connection.getInputStream();
//獲取請(qǐng)求的內(nèi)容總長(zhǎng)度
int contentLength = connection.getContentLength();
//設(shè)置progressBar的Max
mPb.setMax(contentLength);
//創(chuàng)建緩沖輸入流對(duì)象,相對(duì)于inputStream效率要高一些
BufferedInputStream bfi = new BufferedInputStream(inputStream);
//此處的len表示每次循環(huán)讀取的內(nèi)容長(zhǎng)度
int len;
//已經(jīng)讀取的總長(zhǎng)度
int totle = 0;
//bytes是用于存儲(chǔ)每次讀取出來(lái)的內(nèi)容
byte[] bytes = new byte[1024];
while ((len = bfi.read(bytes)) != -1) {
//每次讀取完了都將len累加在totle里
totle += len;
//每次讀取的都更新一次progressBar
mPb.setProgress(totle);
//通過(guò)文件輸出流寫(xiě)入從服務(wù)器中讀取的數(shù)據(jù)
outputStream.write(bytes, 0, len);
}
//關(guān)閉打開(kāi)的流對(duì)象
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();
}
總結(jié)
以上所述是小編給大家介紹的Android基于HttpUrlConnection類的文件下載實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android HttpURLConnection下載網(wǎng)絡(luò)圖片設(shè)置系統(tǒng)壁紙
- Android 用HttpURLConnection訪問(wèn)網(wǎng)絡(luò)的方法
- Android網(wǎng)絡(luò)技術(shù)HttpURLConnection詳解
- Android程序開(kāi)發(fā)通過(guò)HttpURLConnection上傳文件到服務(wù)器
- Android 中HttpURLConnection與HttpClient使用的簡(jiǎn)單實(shí)例
- Android HttpURLConnection.getResponseCode()錯(cuò)誤解決方法
- Android使用HttpURLConnection實(shí)現(xiàn)網(wǎng)絡(luò)訪問(wèn)流程
相關(guān)文章
Android中操作SQLite數(shù)據(jù)庫(kù)快速入門(mén)教程
這篇文章主要介紹了Android中操作SQLite數(shù)據(jù)庫(kù)快速入門(mén)教程,本文講解了數(shù)據(jù)庫(kù)基礎(chǔ)概念、Android平臺(tái)下數(shù)據(jù)庫(kù)相關(guān)類、創(chuàng)建數(shù)據(jù)庫(kù)、向表格中添加數(shù)據(jù)、從表格中查詢記錄等內(nèi)容,需要的朋友可以參考下2015-03-03
Android自定義Drawable實(shí)現(xiàn)圓形和圓角
這篇文章主要為大家詳細(xì)介紹了Android自定義Drawable實(shí)現(xiàn)圓形和圓角,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
android輸入框內(nèi)容改變的監(jiān)聽(tīng)事件實(shí)例
下面小編就為大家分享一篇android輸入框內(nèi)容改變的監(jiān)聽(tīng)事件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Android自定義密碼樣式 黑點(diǎn)轉(zhuǎn)換成特殊字符
這篇文章主要為大家詳細(xì)介紹了Android自定義密碼樣式的制作方法,黑點(diǎn)換成¥、%等特殊字符,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Android RecyclerView的卡頓問(wèn)題的解決方法
本篇文章主要介紹了Android RecyclerView的卡頓問(wèn)題的解決方法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04

