Android 使用http协议下载文件

来源:互联网 发布:手机淘宝运营介绍 编辑:程序博客网 时间:2024/05/20 15:38

1. 创建HttpURLConnection对象

 HttpDownloader downloader  = new HttpDownloader(); 

 

2.获得一个InputStream对象

 

3.访问网络,在Manifest.xml声明:androi.permission.INTERNET

<?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">    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".Download"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <uses-sdk android:minSdkVersion="4" />    <uses-permission android:name="android.permission.INTERNET"/>  //允许网络访问    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //允许写入SDK卡</manifest> 


 4.正文

Environment.getExternalStorageDirectory()// 获得SD卡的路径



package page.util;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下载文本文件  */ public String download(String urlStr){  StringBuffer sb = new StringBuffer();  String line = null;  BufferedReader buffer = null;  try{   url = new URL(urlStr);   HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();   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();   } /**  * 下载文件并写SD卡  * @param urlStr  * @param path  * @param fileName  * @return 0-success,-1-fail,1-existed  */ public int downFile(String urlStr,String path,String fileName){  InputStream inputStream= null;  try{   FileUtil fileUtil = new FileUtil();   if(fileUtil.isFileExist(path+fileName))    return 1;   else{    inputStream = getInputStreamFromUrl(urlStr);    File resultFile = fileUtil.write2SDFromInput(path, fileName, inputStream);    if(resultFile == null)     return -1;   }     }catch(Exception e){   e.printStackTrace();  }finally{   try{    inputStream.close();   }catch(Exception e){    e.printStackTrace();   }     }  return 0; } public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException,IOException{  url = new URL(urlStr);  HttpURLConnection urlCon =(HttpURLConnection)url.openConnection();  InputStream inputStream = urlCon.getInputStream();  return inputStream;   }}package page.util;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 FileUtil{ private String SDPATH;  public String getSDPATH(){  return SDPATH; }  public FileUtil(){  SDPATH= Environment.getExternalStorageDirectory()+"/"; }  public File createSDFile(String fileName) throws IOException{  File file = new File(SDPATH+fileName);  file.createNewFile();  return file; } 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(); } public File write2SDFromInput(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];   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.AndroidMainfest.xml中配置

主要是解决网络权限和写SDCard的权限

 

 

Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="linys.download" android:versionCode="1" android:versionName="1.0">   
  4.     <uses-sdk android:minSdkVersion="8" />   
  5.   
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">   
  7.         <activity android:name=".Download" android:label="@string/app_name">   
  8.             <intent-filter>   
  9.                 <action android:name="android.intent.action.MAIN" />   
  10.                 <category android:name="android.intent.category.LAUNCHER" />   
  11.             </intent-filter>   
  12.         </activity>   
  13.     </application>   
  14.     <!-- 访问网络和操作SD卡 加入的两个权限配置 -->   
  15.         <uses-permission android:name="android.permission.INTERNET" />   
  16.         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
  17. </manifest>  
[java] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="linys.download" android:versionCode="1" android:versionName="1.0">  
  4.     <uses-sdk android:minSdkVersion="8" />  
  5.   
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".Download" android:label="@string/app_name">  
  8.             <intent-filter>  
  9.                 <action android:name="android.intent.action.MAIN" />  
  10.                 <category android:name="android.intent.category.LAUNCHER" />  
  11.             </intent-filter>  
  12.         </activity>  
  13.     </application>  
  14.     <!-- 访问网络和操作SD卡 加入的两个权限配置 -->  
  15.         <uses-permission android:name="android.permission.INTERNET" />  
  16.         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  17. </manifest>  
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="linys.download" android:versionCode="1" android:versionName="1.0"><uses-sdk android:minSdkVersion="8" /><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".Download" android:label="@string/app_name"><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>

 

2.Activity编写

 利用Http协议下载文件并存储到SDCard
    1.创建一个URL对象
    2.通过URL对象,创建一个HttpURLConnection对象
    3.得到InputStream
    4.从InputStream当中读取数据
    存到SDCard
    1.取得SDCard路径
    2.利用读取大文件的IO读法,读取文件

Java代码 复制代码 收藏代码
  1. package linys.download;   
  2.   
  3. import java.io.BufferedReader;   
  4. import java.io.File;   
  5. import java.io.FileOutputStream;   
  6. import java.io.IOException;   
  7. import java.io.InputStream;   
  8. import java.io.InputStreamReader;   
  9. import java.io.OutputStream;   
  10. import java.net.HttpURLConnection;   
  11. import java.net.MalformedURLException;   
  12. import java.net.URL;   
  13.   
  14. import android.app.Activity;   
  15. import android.os.Bundle;   
  16. import android.os.Environment;   
  17. import android.view.View;   
  18. import android.view.View.OnClickListener;   
  19. import android.widget.Button;   
  20. /**  
  21.  *   
  22.  * @Project: Android_MyDownload 
  23.  * @Desciption: 利用Http协议下载文件并存储到SDCard 
  24.     1.创建一个URL对象  
  25.     2.通过URL对象,创建一个HttpURLConnection对象 
  26.     3.得到InputStream  
  27.     4.从InputStream当中读取数据 
  28.     存到SDCard  
  29.     1.取得SDCard路径  
  30.     2.利用读取大文件的IO读法,读取文件 
  31.  *   
  32.  * @Author: LinYiSong 
  33.  * @Date: 2011-3-25~2011-3-25 
  34.  */  
  35. public class MyDownload extends Activity {   
  36.        
  37.     private Button downFileBtn;   
  38.     private Button downMP3Btn;   
  39.     /** Called when the activity is first created. */  
  40.     @Override  
  41.     public void onCreate(Bundle savedInstanceState) {   
  42.         super.onCreate(savedInstanceState);   
  43.         setContentView(R.layout.main);   
  44.            
  45.         downFileBtn=(Button)this.findViewById(R.id.downFile);   
  46.         downMP3Btn=(Button)this.findViewById(R.id.downMP3);   
  47.            
  48.         downFileBtn.setOnClickListener(new DownFileClickListener());   
  49.         downMP3Btn.setOnClickListener(new DownMP3ClickListener());   
  50.     }   
  51.        
  52.     /**  
  53.      *   
  54.      * @Project: Android_MyDownload 
  55.      * @Desciption: 只能读取文本文件,读取mp3文件会出现内存溢出现象 
  56.      * @Author: LinYiSong 
  57.      * @Date: 2011-3-25~2011-3-25 
  58.      */  
  59.     class DownFileClickListener implements OnClickListener{   
  60.         @Override  
  61.         public void onClick(View v) {   
  62.             String urlStr="http://172.17.54.91:8080/download/down.txt";   
  63.             try {   
  64.                 /* 
  65.                  * 通过URL取得HttpURLConnection 
  66.                  * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置 
  67.                  * <uses-permission android:name="android.permission.INTERNET" /> 
  68.                  */  
  69.                 URL url=new URL(urlStr);   
  70.                 HttpURLConnection conn=(HttpURLConnection)url.openConnection();   
  71.                 //取得inputStream,并进行读取  
  72.                 InputStream input=conn.getInputStream();   
  73.                 BufferedReader in=new BufferedReader(new InputStreamReader(input));   
  74.                 String line=null;   
  75.                 StringBuffer sb=new StringBuffer();   
  76.                 while((line=in.readLine())!=null){   
  77.                     sb.append(line);   
  78.                 }   
  79.                 System.out.println(sb.toString());   
  80.                    
  81.             } catch (MalformedURLException e) {   
  82.                 e.printStackTrace();   
  83.             } catch (IOException e) {   
  84.                 e.printStackTrace();   
  85.             }   
  86.         }   
  87.     }   
  88.     /**  
  89.      *   
  90.      * @Project: Android_MyDownload 
  91.      * @Desciption: 读取任意文件,并将文件保存到手机SDCard 
  92.      * @Author: LinYiSong 
  93.      * @Date: 2011-3-25~2011-3-25 
  94.      */  
  95.     class DownMP3ClickListener implements OnClickListener{   
  96.   
  97.         @Override  
  98.         public void onClick(View v) {   
  99.             String urlStr="http://172.17.54.91:8080/download/1.mp3";   
  100.             String path="file";   
  101.             String fileName="2.mp3";   
  102.             OutputStream output=null;   
  103.             try {   
  104.                 /* 
  105.                  * 通过URL取得HttpURLConnection 
  106.                  * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置 
  107.                  * <uses-permission android:name="android.permission.INTERNET" /> 
  108.                  */  
  109.                 URL url=new URL(urlStr);   
  110.                 HttpURLConnection conn=(HttpURLConnection)url.openConnection();   
  111.                 //取得inputStream,并将流中的信息写入SDCard  
  112.                    
  113.                 /* 
  114.                  * 写前准备 
  115.                  * 1.在AndroidMainfest.xml中进行权限配置 
  116.                  * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
  117.                  * 取得写入SDCard的权限 
  118.                  * 2.取得SDCard的路径: Environment.getExternalStorageDirectory() 
  119.                  * 3.检查要保存的文件上是否已经存在 
  120.                  * 4.不存在,新建文件夹,新建文件 
  121.                  * 5.将input流中的信息写入SDCard 
  122.                  * 6.关闭流 
  123.                  */  
  124.                 String SDCard=Environment.getExternalStorageDirectory()+"";   
  125.                 String pathName=SDCard+"/"+path+"/"+fileName;//文件存储路径  
  126.                    
  127.                 File file=new File(pathName);   
  128.                 InputStream input=conn.getInputStream();   
  129.                 if(file.exists()){   
  130.                     System.out.println("exits");   
  131.                     return;   
  132.                 }else{   
  133.                     String dir=SDCard+"/"+path;   
  134.                     new File(dir).mkdir();//新建文件夹  
  135.                     file.createNewFile();//新建文件  
  136.                     output=new FileOutputStream(file);   
  137.                     //读取大文件  
  138.                     byte[] buffer=new byte[4*1024];   
  139.                     while(input.read(buffer)!=-1){   
  140.                         output.write(buffer);   
  141.                     }   
  142.                     output.flush();   
  143.                 }   
  144.             } catch (MalformedURLException e) {   
  145.                 e.printStackTrace();   
  146.             } catch (IOException e) {   
  147.                 e.printStackTrace();   
  148.             }finally{   
  149.                 try {   
  150.                         output.close();   
  151.                         System.out.println("success");   
  152.                     } catch (IOException e) {   
  153.                         System.out.println("fail");   
  154.                         e.printStackTrace();   
  155.                     }   
  156.             }   
  157.         }   
  158.            
  159.     }   
  160. }  

 

原创粉丝点击