使用HttpURLConnection下载文件

一.把Android.permission.INTERNET添加到AndroidMainfest.xml配置文件中,使整个程序有访问网络的权限。

[html]  view plain copy
  1. <uses-permission android:name="android.permission.INTERNET"/>  

二.创建一个下载连接并返回InputStream对象。InputStream对象就是下载的文件的字节流
     

[java]  view plain copy
  1. /** 
  2.       * 获取下载文件的InputStream对象 
  3.       * @param urlStr 下载文件的地址 
  4.       * @return 返回InputStream文件对象 
  5.       * @throws MalformedURLException 
  6.       * @throws IOException 
  7.       */  
  8.      public InputStreamGet_inputStream(String urlStr)  
  9.      throws MalformedURLException ,IOException  
  10.      {  
  11.             //创建按一个URL实例  
  12.             url = new URL(urlStr);  
  13.             //创建一个HttpURLConnection的链接对象  
  14.             HttpURLConnection httpConn =(HttpURLConnection)url.openConnection();  
  15.             //获取所下载文件的InputStream对象  
  16.             InputStream inputStream=httpConn.getInputStream();  
  17.             //返回下载文件的InputStream对象  
  18.             return inputStream;  
  19.      }  

三. 如果下载文本文件可以直接对文件内的字符进行操作。
     

[java]  view plain copy
  1. /** 
  2.       *  下载文本文件,直接返回字符串 
  3.       * @param urlStr 下载地址 
  4.       * @return 返回文本文件的字符串 
  5.       */  
  6.      public String DownTxt(StringurlStr)  
  7.      {  
  8.             //创建StringBuffer 对象存放转换后的字符串  
  9.             StringBuffer sBuffer = newStringBuffer();  
  10.             //创建临时的String变量,临时存放文本文件的每一行字符串  
  11.             String line = null;  
  12.             //BufferedReader有个可以一次读取一行内容的方法readLine()。  
  13.             //所以创建ufferedReader对象存放下载的文本内容  
  14.             BufferedReaderbufferedReader = null;  
  15.             try {  
  16.                    //把Get_inputStream()方法返回的是字节流,转换成InputStreamReader类的字符流。  
  17.                    //由于字节与字符流不好操作所以转换成BufferedReader  
  18.                    //然后使用它的eadLine()方法一次读取一行内容。  
  19.                    bufferedReader = newBufferedReader(new nputStreamReader(Get_inputStream(urlStr)));  
  20.                    //循环读取每一行的内容赋值给StringBuffer 对象。  
  21.                    while ((line =bufferedReader.readLine()) != null ) {  
  22.                           sBuffer.append(line);  
  23.                    }  
  24.             } catch (Exception e) {  
  25.                    // TODO: handleexception  
  26.                    e.printStackTrace();  
  27.             }finally{  
  28.                    try {  
  29.                           bufferedReader.close();  
  30.                    } catch (Exception e){  
  31.                           // TODO:handle exception  
  32.                           e.printStackTrace();  
  33.                    }  
  34.             }  
  35.             return sBuffer.toString();  
  36.      }  

四.把文件直接写入到手机内存卡中
     

[java]  view plain copy
  1. /** 
  2.       * 写入文件 
  3.       * @param inputStream 下载文件的字节流对象 
  4.       * @param sdpath 文件的存放目录 
  5.       */  
  6.      public void WriteFile( InputStreaminputStream , String sdpath) {  
  7.             try {  
  8.                    //在指定目录创建一个空文件并获取文件对象  
  9.                    File file  = createSDFile(sdpath);  
  10.                    //获取一个写入文件流对象  
  11.                    OutputStream ouput =new FileOutputStream(file);  
  12.                    //创建一个4*1024大小的字节数组,作为循环读取字节流的临时存储空  
  13.   
  14.                    byte buffer[] = newbyte[4*1024];  
  15.                    //循环读取下载的文件到buffer对象数组中  
  16.                    while((inputStream.read(buffer)) != -1) {  
  17.                    //把文件写入到文件  
  18.                    ouput.write(buffer);  
  19.                    }  
  20.             } catch (Exception e) {  
  21.                    // TODO: handleexception  
  22.                    e.printStackTrace();  
  23.             }finally{  
  24.                    try {  
  25.                           //关闭写入流  
  26.                           ouput.close();  
  27.                    } catch (Exception e){  
  28.                           // TODO:handle exception  
  29.                           e.printStackTrace();  
  30.                    }  
  31.             }  
  32.      }  
五.写入文件到SD卡需要用到权限
[html]  view plain copy
  1. <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

猜你喜欢

转载自blog.csdn.net/bruse_android/article/details/51239761
今日推荐