现在的位置: 首页 > 综合 > 正文

八.使用HttpURLConnection下载文件

2018年05月01日 ⁄ 综合 ⁄ 共 2123字 ⁄ 字号 评论关闭

使用HttpURLConnection下载文件

一.把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();
                     }
              }
       }

五.写入文件到SD卡需要用到权限

<uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

抱歉!评论已关闭.