Android 下载文件及写入SD卡

Android 下载文件及写入SD卡,实例代码

 

Main.xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <Button    
  8.     android:id="@+id/downloadTxt"  
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="下载文本文件"  
  12.     />  
  13.   
  14. <Button    
  15.     android:id="@+id/downloadMp3"  
  16.     android:layout_width="fill_parent"   
  17.     android:layout_height="wrap_content"   
  18.     android:text="下载MP3文件"  
  19.     />  
  20. </LinearLayout>  

 

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

 

下载助手类httpdownloader 代码  收藏代码
  1. package com.learning.example.util;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.MalformedURLException;  
  10. import java.net.URL;  
  11.   
  12. public class HttpDownloader {  
  13.       
  14.     private URL url = null;   
  15.       
  16.     /**  
  17.      * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容  
  18.      * 1.创建一个URL对象  
  19.      * 2.通过URL对象,创建一个HttpURLConnection对象  
  20.      * 3.得到InputStream  
  21.      * 4.从InputStream当中读取数据  
  22.      * @param urlStr  
  23.      * @return  
  24.      */  
  25.     public String download(String urlStr){  
  26.         StringBuffer sb = new StringBuffer();  
  27.         String line = null;  
  28.         BufferedReader buffer = null;  
  29.         try {  
  30.             url = new URL(urlStr);  
  31.             HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();  
  32.             buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));  
  33.             while( (line = buffer.readLine()) != null){  
  34.                 sb.append(line);  
  35.             }  
  36.               
  37.         }   
  38.         catch (Exception e) {  
  39.             e.printStackTrace();  
  40.         }  
  41.         finally{  
  42.             try {  
  43.                 buffer.close();  
  44.             } catch (IOException e) {  
  45.                 e.printStackTrace();  
  46.             }  
  47.         }  
  48.         return sb.toString();  
  49.     }  
  50.   
  51.     /**  
  52.      *   
  53.      * @param urlStr  
  54.      * @param path  
  55.      * @param fileName  
  56.      * @return   
  57.      *      -1:文件下载出错  
  58.      *       0:文件下载成功  
  59.      *       1:文件已经存在  
  60.      */  
  61.     public int downFile(String urlStr, String path, String fileName){  
  62.         InputStream inputStream = null;  
  63.         try {  
  64.             FileUtils fileUtils = new FileUtils();  
  65.               
  66.             if(fileUtils.isFileExist(path + fileName)){  
  67.                 return 1;  
  68.             } else {  
  69.                 inputStream = getInputStreamFromURL(urlStr);  
  70.                 File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);  
  71.                 if(resultFile == null){  
  72.                     return -1;  
  73.                 }  
  74.             }  
  75.         }   
  76.         catch (Exception e) {  
  77.             e.printStackTrace();  
  78.             return -1;  
  79.         }  
  80.         finally{  
  81.             try {  
  82.                 inputStream.close();  
  83.             } catch (IOException e) {  
  84.                 e.printStackTrace();  
  85.             }  
  86.         }  
  87.         return 0;  
  88.     }  
  89.       
  90.     /**  
  91.      * 根据URL得到输入流  
  92.      * @param urlStr  
  93.      * @return  
  94.      */  
  95.     public InputStream getInputStreamFromURL(String urlStr) {  
  96.         HttpURLConnection urlConn = null;  
  97.         InputStream inputStream = null;  
  98.         try {  
  99.             url = new URL(urlStr);  
  100.             urlConn = (HttpURLConnection)url.openConnection();  
  101.             inputStream = urlConn.getInputStream();  
  102.               
  103.         } catch (MalformedURLException e) {  
  104.             e.printStackTrace();  
  105.         } catch (IOException e) {  
  106.             e.printStackTrace();  
  107.         }  
  108.           
  109.         return inputStream;  
  110.     }  
  111. }  

 

文件操作类fileutils 代码  收藏代码
  1. package com.learning.example.util;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8.   
  9. import android.os.Environment;  
  10.   
  11. public class FileUtils {  
  12.     private String SDPATH;  
  13.       
  14.     private int FILESIZE = 4 * 1024;   
  15.       
  16.     public String getSDPATH(){  
  17.         return SDPATH;  
  18.     }  
  19.       
  20.     public FileUtils(){  
  21.         //得到当前外部存储设备的目录( /SDCARD )  
  22.         SDPATH = Environment.getExternalStorageDirectory() + "/";  
  23.     }  
  24.       
  25.     /**  
  26.      * 在SD卡上创建文件  
  27.      * @param fileName  
  28.      * @return  
  29.      * @throws IOException  
  30.      */  
  31.     public File createSDFile(String fileName) throws IOException{  
  32.         File file = new File(SDPATH + fileName);  
  33.         file.createNewFile();  
  34.         return file;  
  35.     }  
  36.       
  37.     /**  
  38.      * 在SD卡上创建目录  
  39.      * @param dirName  
  40.      * @return  
  41.      */  
  42.     public File createSDDir(String dirName){  
  43.         File dir = new File(SDPATH + dirName);  
  44.         dir.mkdir();  
  45.         return dir;  
  46.     }  
  47.       
  48.     /**  
  49.      * 判断SD卡上的文件夹是否存在  
  50.      * @param fileName  
  51.      * @return  
  52.      */  
  53.     public boolean isFileExist(String fileName){  
  54.         File file = new File(SDPATH + fileName);  
  55.         return file.exists();  
  56.     }  
  57.       
  58.     /**  
  59.      * 将一个InputStream里面的数据写入到SD卡中  
  60.      * @param path  
  61.      * @param fileName  
  62.      * @param input  
  63.      * @return  
  64.      */  
  65.     public File write2SDFromInput(String path,String fileName,InputStream input){  
  66.         File file = null;  
  67.         OutputStream output = null;  
  68.         try {  
  69.             createSDDir(path);  
  70.             file = createSDFile(path + fileName);  
  71.             output = new FileOutputStream(file);  
  72.                             byte[] buffer = new byte[FILESIZE];  
  73.   
  74.             /*真机测试,这段可能有问题,请采用下面网友提供的  
  75.                             while((input.read(buffer)) != -1){  
  76.                 output.write(buffer);  
  77.             }  
  78.                             */  
  79.   
  80.                            /* 网友提供 begin */  
  81.                            int length;  
  82.                            while((length=(input.read(buffer))) >0){  
  83.                                  output.write(buffer,0,length);  
  84.                            }  
  85.                            /* 网友提供 end */  
  86.   
  87.             output.flush();  
  88.         }   
  89.         catch (Exception e) {  
  90.             e.printStackTrace();  
  91.         }  
  92.         finally{  
  93.             try {  
  94.                 output.close();  
  95.             } catch (IOException e) {  
  96.                 e.printStackTrace();  
  97.             }  
  98.         }  
  99.         return file;  
  100.     }  
  101.   
  102. }  

 

主程序类download 代码  收藏代码
  1. package com.learning.example;  
  2.   
  3. import com.learning.example.util.HttpDownloader;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10.   
  11. public class Download extends Activity {  
  12.     private Button downlaodTxtButton ;  
  13.     private Button downlaodMP3Button ;  
  14.       
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         downlaodTxtButton = (Button)findViewById(R.id.downloadTxt);  
  20.         downlaodTxtButton.setOnClickListener(new DownloadTxtListener());  
  21.           
  22.         downlaodMP3Button = (Button)findViewById(R.id.downloadMp3);  
  23.         downlaodMP3Button.setOnClickListener(new DownloadMP3Listener());  
  24.     }  
  25.       
  26.     class DownloadTxtListener implements OnClickListener{  
  27.   
  28.         @Override  
  29.         public void onClick(View v) {  
  30.             HttpDownloader downloader = new HttpDownloader();  
  31.             String lrc = downloader.download("http://172.16.11.9:8080/test/1.lrc");  
  32.             System.out.println(lrc);  
  33.         }  
  34.           
  35.     }  
  36.       
  37.     class DownloadMP3Listener implements OnClickListener{  
  38.   
  39.         @Override  
  40.         public void onClick(View v) {  
  41.             HttpDownloader downloader = new HttpDownloader();  
  42.             int result = downloader.downFile("http://172.16.11.9:8080/test/1.mp3", "voa/", "1.map3");  
  43.             System.out.println(result);  
  44.         }  
  45.           
  46.     }  
  47. }  

Notice:访问网络和操作SD卡 记得加入的两个权限配置

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

posted @ 2015-06-22 11:44  网络虫  阅读(615)  评论(0编辑  收藏  举报