1. 程式人生 > >使用HttpURLConnection下載檔案

使用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"/>