使用HttpURLConnection下載文件

一.把Android.permission.INTERNET添加到AndroidMainfest.xml配置文件中,使整個程序有訪問網絡的權限。

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

二.創建一個下載連接並返回InputStream對象。InputStream對象就是下載的文件的字節流
     

[java] view plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  1. <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章