android示例之下载文件并写入到SD卡的指定目录中

Android中从服务器下载文件并写入到SD卡上。

工具类:

FileUtil.Java

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyc.util;  
  2.   
  3. import java.io.File;  
  4.   
  5. public class FileUtil {  
  6.     private static String SDPATH;  
  7.     public FileUtil(){  
  8.         //得到SD卡的目录,如:“sdcard/”  
  9.         SDPATH=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator;  
  10.     }  
  11.     /** 
  12.      * 在SD卡的指定目录上创建文件 
  13.      * @param fileName 
  14.      */  
  15.     public File createFile(String fileName){  
  16.         File file=new File(SDPATH+fileName);  
  17.         try {  
  18.             file.createNewFile();  
  19.         } catch (IOException e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.         return file;  
  23.     }  
  24.     /** 
  25.      * 在SD卡上创建指定名称的目录 
  26.      * @param dirName 
  27.      */  
  28.     public File createDir(String dirName){  
  29.         File file=new File(SDPATH+dirName+File.separator);  
  30.         file.mkdir();  
  31.         return file;  
  32.     }  
  33.     /** 
  34.      * 判断指定名称的文件在SD卡上是否存在 
  35.      * @param fileName 
  36.      * @return 
  37.      */  
  38.     public boolean isExist(String dirName,String fileName){  
  39.         File file=new File(SDPATH+dirName+fileName);  
  40.         return file.exists();  
  41.     }  
  42.       
  43.     /** 
  44.      * 通过URL得到HttpURLConnection,通过HttpURLConnection得到InputStream 
  45.      * @param urlStr 
  46.      * @return 
  47.      */  
  48.     public InputStream getIS(String urlStr){  
  49.         URL url=null;  
  50.         HttpURLConnection urlConn=null;  
  51.         InputStream is=null;  
  52.         try {  
  53.             url=new URL(urlStr);  
  54.             urlConn=(HttpURLConnection)url.openConnection();  
  55.             is=urlConn.getInputStream();  
  56.         } catch (Exception e) {  
  57.             e.printStackTrace();  
  58.         }  
  59.         return is;  
  60.     }  
  61.     /** 
  62.      * 由得到的输入流把下载的文件写入到SD卡的指定位置 
  63.      * @param is 
  64.      * @param dirName 
  65.      * @param fileName 
  66.      * @return 
  67.      */  
  68.     public File IS2SD(InputStream is,String dirName,String fileName){  
  69.         OutputStream os=null;  
  70.         File file=null;  
  71.         try {  
  72.             createDir(dirName);  
  73.             file=createFile(dirName+fileName);  
  74.             os=new FileOutputStream(file);  
  75.             byte buffer[]=new byte[1024*4];  
  76.             int temp=0;  
  77.             while((temp=is.read(buffer))!=-1){  
  78.                 os.write(buffer, 0, temp);  
  79.             }  
  80.             os.flush();  
  81.         } catch (Exception e) {  
  82.             e.printStackTrace();  
  83.         }finally{  
  84.             try {  
  85.                 os.close();  
  86.             } catch (Exception e) {  
  87.                 e.printStackTrace();  
  88.             }  
  89.         }  
  90.         return file;  
  91.     }  
  92.       
  93. }  

下载文件的类:FileDownloader.java

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class FileDownloader {  
  2.     private FileUtil fileUtil=null;  
  3.     public FileDownloader(){  
  4.         this.fileUtil=new FileUtil();  
  5.     }  
  6.       
  7.     /** 
  8.      * 下载指定路径的文件,并写入到指定的位置 
  9.      * @param dirName 
  10.      * @param fileName 
  11.      * @param urlStr 
  12.      * @return 返回0表示下载成功,返回1表示文件已经在指定位置存在,返回2表示下载出错 
  13.      */  
  14.     public int downloadFile(String dirName,String fileName,String urlStr){  
  15.         if(fileUtil.isExist(dirName,fileName)){  
  16.             return 1;  
  17.         }  
  18.         File file=fileUtil.IS2SD(fileUtil.getIS(urlStr), dirName, fileName);  
  19.         if(file.length()==0  || file==null){  
  20.             return 2;  
  21.         }  
  22.         return 0;  
  23.     }  
  24.     /** 
  25.      * 通过文件在服务器的URL地址,下载到文件内容 
  26.      * @param urlStr 
  27.      * @return 
  28.      */  
  29.     public String download(String urlStr){  
  30.         StringBuffer sb=new StringBuffer();  
  31.         String line=null;  
  32.         InputStream is=fileUtil.getIS(urlStr);  
  33.         //由于InputStream流不方便使用,包装成处理流  
  34.         BufferedReader br=new BufferedReader(new InputStreamReader(is));  
  35.         try {  
  36.             while((line=br.readLine())!=null){  
  37.                 sb.append(line);  
  38.             }  
  39.         } catch (Exception e) {  
  40.             e.printStackTrace();  
  41.         }finally{  
  42.             try {  
  43.                 br.close();  
  44.             } catch (Exception e) {  
  45.                 e.printStackTrace();  
  46.             }  
  47.         }  
  48.         return sb.toString();  
  49.     }  
  50. }  

在activity中操作下载,点击按钮下载:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. mp3.setOnClickListener(new OnClickListener() {  
  2.             public void onClick(View v) {  
  3.                 new Thread(new Runnable(){  
  4.                     public void run() {  
  5.                         int result=new FileDownloader().downloadFile("mp3/""001.mp3""http://192.168.1.100:8080/test/001.mp3");  
  6.                         System.out.println("result="+result);  
  7.                     }  
  8.                 }).start();  
  9.             }  
  10.         });  

不要忘记加上权限,访问网络和对SD卡读写的权限:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <uses-permission android:name="android.permission.INTERNET"/>  
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

猜你喜欢

转载自blog.csdn.net/mlsnatalie/article/details/52846353
今日推荐