使用Http协议下载文件,写入SD卡中

下载步骤:

1、创建一个HttpURLConnection对象

HttpURLConnection urlConn =

(HttpURLConnection )url.openConnection();

2、获得一个InputStream对象

urlConn.getInoutStream()

3、设置网络访问权限(manifest文件中设置)

android.permission.INTERNET

访问SD卡:

1. 得到SD卡的目录

Environment.getExternalStorageDirectory()

2. 访问SD卡的权限:

android.permission.WRITE_EXTERNAL_STORAGE

注意:一定不要忘记设置权限

Manifest.xml文件:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="mars.download"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk android:minSdkVersion="4" />    <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >        <activity            android:label="@string/app_name"            android:name=".DownloadActivity" >            <intent-filter >                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <!-- 设置网络下载权限和SD卡写入权限 -->    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></manifest>

DownloadActivity.java:

package mars.download;import mars.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 DownloadActivity extends Activity {    /** Called when the activity is first created. */private Button downloadTxtButton;private Button downloadMp3Button;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        downloadTxtButton = (Button)findViewById(R.id.downloadTxt);        downloadMp3Button = (Button)findViewById(R.id.downloadMp3);        downloadTxtButton.setOnClickListener(new DownLoadTxtListener());        downloadMp3Button.setOnClickListener(new DownLoadMp3Listener());    }class DownLoadTxtListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubHttpDownloader httpDownloader = new HttpDownloader();String str = httpDownloader.download("http://ishare.sina.cn/download.php?action=loading&id=13912266&cid=05_14&p=1");System.out.println("Download");System.out.println(str);}}class DownLoadMp3Listener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString urlStr = "http://ishare.sina.cn/download.php?action=loading&id=13912266&cid=05_14&p=1";HttpDownloader httpDownloader = new HttpDownloader();int state = httpDownloader.downFile(urlStr, "voa/", "myFile");System.out.println(state);}}}

HttpDownloader.java:

package mars.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. 得到InputStream * 4. 从InputStream当中读取数据 *///文本文件的下载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流读取数据/** * urlConn.getInputStream()得到的是字节流 * 套一层InputStreamReader得到的是字符流 * 在套一层BufferedReader得到的字符流就可以使用readLine按行读取数据了 */buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));while((line = buffer.readLine())!=null){sb.append(line);}}catch(Exception e){System.out.println("Error");e.printStackTrace();}finally{try{buffer.close();}catch(Exception e){e.printStackTrace();}}return sb.toString();}//下载文件并写入到SD卡中//参数:url地址,文件存储目录绝对路径,存储的文件名public int downFile(String urlStr,String path,String fileName){InputStream inputStream = null;try{FileUtils fileUtils = new FileUtils();//如果文件已经存在则返回1if(fileUtils.isFileExist(path+fileName)){return 1;}else{//根据url地址得到文件输入流inputStream = getInputStreamFromUrl(urlStr);//将输入流写入SD卡,具体过程见FileUtils.javaFile resultFile = fileUtils.writeSDFromInput(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地址得到文件输入流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 mars.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;/** * 此类是操作SD卡文件的封装 * 包括判断文件(夹)是否存在,创建文件(夹),将文件流写入文件 *  * @author Administrator * */public class FileUtils {//SD卡的路径名private String SDPATH;public String getSDPATH(){return SDPATH;}public FileUtils(){//得到当前外部存储设备的目录SDPATH = Environment.getExternalStorageDirectory()+"/";}/** * 在SD卡上创建文件 *  */public File createSDFile(String fileName)throws IOException{//根据文件的全路径名得到文件对象File file = new File(SDPATH + fileName);//创建文件file.createNewFile();return file;}/** * 在SD卡上创建目录 */public File createSDDir(String dirName){File dir = new File(SDPATH + dirName);dir.mkdir();return dir;}/** * 判断文件夹是否存在 */public boolean isFileExist(String fileName){File file = new File(SDPATH + fileName);return file.exists();}/** * 将一个InputStream里面的数据写入到SD卡中 *///参数:文件存放路径(绝对目录路径),文件名,输入流public File writeSDFromInput(String path,String fileName,InputStream input){File file = null;OutputStream output = null;try{//创建文件存储目录createSDDir(path);//创建文件file = createSDFile(path+fileName);//获取新建文件的输出流output = new FileOutputStream(file);//缓冲区byte buffer [] = new byte[4 * 1024];//从输入流中依次读入数据并输出到文件中,每次4个字节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;}}

更多相关文章

  1. 为android编译ffmpeg+x264+faac
  2. android 开发 获取各种intent (图片、apk文件、excel、pdf等文件)
  3. 在xml配置文件中设置字体加粗
  4. Android(安卓)MediaPlayer使用方法简单介绍
  5. android 数据共享
  6. android使用activity切换动画效果
  7. android camer 图片回显界面照片分享到微博、人人、彩信、蓝牙的
  8. Android应用程序窗口(Activity,Window,View)原理解析
  9. Android(安卓)Audio 数据流详解

随机推荐

  1. Android下Notification(通知栏)的使用
  2. Android(安卓)ListView简单实用
  3. Android之圆角矩形
  4. Android(安卓)ListView(Selector 颜色)
  5. Android(安卓)app版本号的修改
  6. 我的Android进阶之旅------>Android电话
  7. 2011.09.13——— android Bitmap.Config
  8. Android(安卓)开源源代码收集(不断更新中.
  9. Android(安卓)长按setOnItemLongClickLis
  10. android 获取 imei号码