Android利用Http下載文件
一、場景
下載存文本文件和下載如mp3等大容量的文件
界面
二、代碼編寫
1.AndroidMainfest.xml中配置
主要是解決網絡權限和寫SDCard的權限
- "1.0" encoding="utf-8"?>
- "http://schemas.android.com/apk/res/android"
- package="linys.download" android:versionCode="1" android:versionName="1.0">
- "8" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- ".Download" android:label="@string/app_name">
- <action android:name="android.intent.action.MAIN" />
- "android.intent.category.LAUNCHER" />
- </activity>
- <!-- 訪問網絡和操作SD卡 加入的兩個權限配置 -->
- "android.permission.INTERNET" />
- "android.permission.WRITE_EXTERNAL_STORAGE" />
- </manifest>
2.Activity編寫
利用Http協議下載文件並存儲到SDCard
1.創建一個URL對象
2.通過URL對象,創建一個HttpURLConnection對象
3.得到InputStream
4.從InputStream當中讀取數據
存到SDCard
1.取得SDCard路徑
2.利用讀取大文件的IO讀法,讀取文件
- package linys.download;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Environment;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- /**
- *
- * @Project: Android_MyDownload
- * @Desciption: 利用Http協議下載文件並存儲到SDCard
- 1.創建一個URL對象
- 2.通過URL對象,創建一個HttpURLConnection對象
- 3.得到InputStream
- 4.從InputStream當中讀取數據
- 存到SDCard
- 1.取得SDCard路徑
- 2.利用讀取大文件的IO讀法,讀取文件
- *
- * @Author: LinYiSong
- * @Date: 2011-3-25~2011-3-25
- */
- public class MyDownload extends Activity {
- private Button downFileBtn;
- private Button downMP3Btn;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.findViewById(R.id.downFile);
- this.findViewById(R.id.downMP3);
- downFileBtn.setOnClickListener(new DownFileClickListener());
- new DownMP3ClickListener());
- /**
- *
- * @Project: Android_MyDownload
- * @Desciption: 只能讀取文本文件,讀取mp3文件會出現內存溢出現象
- * @Author: LinYiSong
- * @Date: 2011-3-25~2011-3-25
- */
- class DownFileClickListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- "http://172.17.54.91:8080/download/down.txt";
- try {
- /*
- * 通過URL取得HttpURLConnection
- * 要網絡連接成功,需在AndroidMainfest.xml中進行權限配置
- * <uses-permission android:name="android.permission.INTERNET" />
- */
- new URL(urlStr);
- //取得inputStream,並進行讀取
- BufferedReader in=new BufferedReader(new InputStreamReader(input));
- null;
- new StringBuffer();
- while((line=in.readLine())!=null){
- }
- catch (MalformedURLException e) {
- } catch (IOException e) {
- }
- }
- /**
- *
- * @Project: Android_MyDownload
- * @Desciption: 讀取任意文件,並將文件保存到手機SDCard
- * @Author: LinYiSong
- * @Date: 2011-3-25~2011-3-25
- */
- class DownMP3ClickListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- "http://172.17.54.91:8080/download/1.mp3";
- "file";
- "2.mp3";
- null;
- try {
- /*
- * 通過URL取得HttpURLConnection
- * 要網絡連接成功,需在AndroidMainfest.xml中進行權限配置
- * <uses-permission android:name="android.permission.INTERNET" />
- */
- new URL(urlStr);
- //取得inputStream,並將流中的信息寫入SDCard
- /*
- * 寫前准備
- * 1.在AndroidMainfest.xml中進行權限配置
- * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- * 取得寫入SDCard的權限
- * 2.取得SDCard的路徑: Environment.getExternalStorageDirectory()
- * 3.檢查要保存的文件上是否已經存在
- * 4.不存在,新建文件夾,新建文件
- * 5.將input流中的信息寫入SDCard
- * 6.關閉流
- */
- "";
- "/"+path+"/"+fileName;//文件存儲路徑
- File file=new File(pathName);
- if(file.exists()){
- "exits");
- return;
- else{
- "/"+path;
- new File(dir).mkdir();//新建文件夾
- //新建文件
- new FileOutputStream(file);
- //讀取大文件
- byte[] buffer=new byte[4*1024];
- while(input.read(buffer)!=-1){
- }
- }
- catch (MalformedURLException e) {
- } catch (IOException e) {
- }finally{
- try {
- System.out.println("success");
- catch (IOException e) {
- "fail");
- }
- }
- }
- }