使用HttpURLConnection下載檔案
阿新 • • 發佈:2018-11-05
一.把Android.permission.INTERNET新增到AndroidMainfest.xml配置檔案中,使整個程式有訪問網路的許可權。
- <uses-permission android:name="android.permission.INTERNET"/>
二.建立一個下載連線並返回InputStream物件。InputStream物件就是下載的檔案的位元組流
- /**
- * 獲取下載檔案的InputStream物件
- * @param urlStr 下載檔案的地址
- * @return 返回InputStream檔案物件
- * @throws MalformedURLException
- * @throws IOException
- */
- public InputStreamGet_inputStream(String urlStr)
- throws MalformedURLException ,IOException
- {
- //建立按一個URL例項
- url = new URL(urlStr);
- //建立一個HttpURLConnection的連結物件
- HttpURLConnection httpConn =(HttpURLConnection)url.openConnection();
- //獲取所下載檔案的InputStream物件
- InputStream inputStream=httpConn.getInputStream();
- //返回下載檔案的InputStream物件
- return inputStream;
- }
三. 如果下載文字檔案可以直接對檔案內的字元進行操作。
- /**
- * 下載文字檔案,直接返回字串
- * @param urlStr 下載地址
- * @return 返回文字檔案的字串
- */
- public String DownTxt(StringurlStr)
- {
- //建立StringBuffer 物件存放轉換後的字串
- StringBuffer sBuffer = newStringBuffer();
- //建立臨時的String變數,臨時存放文字檔案的每一行字串
- String line = null;
- //BufferedReader有個可以一次讀取一行內容的方法readLine()。
- //所以建立ufferedReader物件存放下載的文字內容
- BufferedReaderbufferedReader = null;
- try {
- //把Get_inputStream()方法返回的是位元組流,轉換成InputStreamReader類的字元流。
- //由於位元組與字元流不好操作所以轉換成BufferedReader
- //然後使用它的eadLine()方法一次讀取一行內容。
- bufferedReader = newBufferedReader(new nputStreamReader(Get_inputStream(urlStr)));
- //迴圈讀取每一行的內容賦值給StringBuffer 物件。
- while ((line =bufferedReader.readLine()) != null ) {
- sBuffer.append(line);
- }
- } catch (Exception e) {
- // TODO: handleexception
- e.printStackTrace();
- }finally{
- try {
- bufferedReader.close();
- } catch (Exception e){
- // TODO:handle exception
- e.printStackTrace();
- }
- }
- return sBuffer.toString();
- }
四.把檔案直接寫入到手機記憶體卡中
- /**
- * 寫入檔案
- * @param inputStream 下載檔案的位元組流物件
- * @param sdpath 檔案的存放目錄
- */
- public void WriteFile( InputStreaminputStream , String sdpath) {
- try {
- //在指定目錄建立一個空檔案並獲取檔案物件
- File file = createSDFile(sdpath);
- //獲取一個寫入檔案流物件
- OutputStream ouput =new FileOutputStream(file);
- //建立一個4*1024大小的位元組陣列,作為迴圈讀取位元組流的臨時儲存空
- byte buffer[] = newbyte[4*1024];
- //迴圈讀取下載的檔案到buffer物件陣列中
- while((inputStream.read(buffer)) != -1) {
- //把檔案寫入到檔案
- ouput.write(buffer);
- }
- } catch (Exception e) {
- // TODO: handleexception
- e.printStackTrace();
- }finally{
- try {
- //關閉寫入流
- ouput.close();
- } catch (Exception e){
- // TODO:handle exception
- e.printStackTrace();
- }
- }
- }
[html] view plain copy
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>