首先创建一个HttpDownloader类,获取下载文件的网络地址,将文件下载下来以String流的方式返回:

    public String download(String urlStr){

      //urlStr为文件的网络地址,如http://192.168.1.105:8080/mp3/resources.xml
      StringBuffer sb = new StringBuffer();
      String line = null;
      BufferedReader buffer = null;
      try
      {
        //创建一个URL对象
        url = new URL(urlStr);
        //创建一个Http连接
        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
        //使用IO流读取数据
        buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
        while((line = buffer.readLine()) != null){
          sb.append(line);
        }
      }
      catch(Exception ex){
        ex.printStackTrace();
      }
      finally{
        try{
          buffer.close();
        }
        catch(Exception ex){
          ex.printStackTrace();
        }
      }
      return sb.toString();
    }
  }

  仍在此类下,定义下载文件并写入手机SD卡:

    public int downFile(String urlStr,String path,String filename){
      //urlStr网络下载地址,path:写入SD卡上的地址,filename下载文件名
      InputStream inputStream = null;
      try{
        //声明FileUtils对象
        FileUtils fileUtils = new FileUtils();
        if(fileUtils.isFileExist(filename,path)){
          return 1; //文件已经存在则返回1
        }
        else{
          //将下载文件存入inputStream流中
          inputStream = getInputStreamFromUrl(urlStr);
          //将下载的文件写入SD卡
          File resultFile = fileUtils.write2SDFromInput(path, filename, inputStream);
          if(resultFile == null){
            return -1; //写入失败则返回-1
          }
        }
      }
      catch(Exception e){
        e.printStackTrace();
        return -1;
      }
      finally{
        try{
          inputStream.close();
        }
        catch(Exception e){
          e.printStackTrace();
        }
      }
      return 0; //下载写入SD卡成功则返回0
    }
    public InputStream getInputStreamFromUrl(String urlStr) throws IOException{
      url = new URL(urlStr);
      HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
      InputStream inputStream = urlConn.getInputStream();
      return inputStream;
    }

  将下载的inputStream写入SD卡中,定义类FileUtils:

    public class FileUtils {
      private String SDCardRoot;

      public FileUtils() {
        // 得到当前外部存储设备的目录
        SDCardRoot = Environment.getExternalStorageDirectory()
          .getAbsolutePath();
      }

      /**
       * 在SD卡上创建文件
       *
       * @throws IOException
      */
      public File createFileInSDCard(String fileName, String dir)
        throws IOException {
          File file = new File(SDCardRoot + dir + File.separator + fileName);
          file.createNewFile();
          return file;
      }

      /**
       * 在SD卡上创建目录
       *
       * @param dirName
      */
      public File createSDDir(String dir) {
        File dirFile = new File(SDCardRoot + dir + File.separator);
        dirFile.mkdirs();
        return dirFile;
      }

      /**
       * 判断SD卡上的文件夹是否存在
      */
      public boolean isFileExist(String fileName, String path) {
        File file = new File(SDCardRoot + path + File.separator + fileName);
        return file.exists();
      }

      /**
       * 将另一个InputStream里面的数据写入到SD中
      */
      public File write2SDFromInput(String path, String fileName,
        InputStream input) {
          File file = null;
          OutputStream output = null;
          try {
            createSDDir(path);
            file = createFileInSDCard(fileName, path);
            //文件写入流,就是将数据写入file文件
            output = new FileOutputStream(file);
            //定义buffer大小为4K,就是每读取4K的内容就像文件中写入一次
            byte buffer[] = new byte[1024 * 4];
            int temp;
            while ((temp = input.read(buffer)) != -1) {
            output.write(buffer, 0, temp);
            }
          output.flush(); //清空缓存
          } catch (Exception ex) {
            ex.printStackTrace();
          } finally {
            try {
              output.close(); //关闭写入流
            } catch (Exception ex) {
              ex.printStackTrace();
            }
          }
          return file;
      }
    }

Android从网络某个地址下载文件、写入SD卡的更多相关文章

  1. 从网络上下载文件到sd卡上

    String SDPATH = Environment.getExternalStorageDirectory() + "/"; String path = SDPATH + &q ...

  2. 第四十五篇--将文件写入SD卡

    RAM: 运行内存 ROM: 外部存储,手机内部存储 SD卡:外部存储,SD卡存储. 在存储文件时千万不要忘记向清单文件中添加相应权限,并且android6.0以后还要添加运行时权限 还有一个权限有所 ...

  3. Android下载文件到SD卡

    HttpURLConnection 上传方式: 尝试理解这两种流的区别: InputStreamReader 的读取方式: //创建一个URL对象 URL url = new URL(urlStrin ...

  4. Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)

    很多手机游戏,在安装APK之后都得需要下载相应的资源包,然后才能进入游戏. 有这样一个需求:就是游戏中需要的资源包打在APK内,随apk一起进行安装到手机中. 这样就不需要,在安装APK之后,去下载资 ...

  5. 转 Android:文件下载和写入SD卡学习小结

    转自 http://blog.csdn.net/zzp_403184692/article/details/8160739  一.文件下载  Android开发中,有时需要从网上下载一些资源以供用户使 ...

  6. Android 下载文件及写入SD卡

    Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  7. Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转

     Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...

  8. 前后台交互实现点击超链接通过指定的 url 去网络或者文件服务器下载文件

    前台 VUE 界面: <el-table-column prop="attachment" align="center" label="附件详情 ...

  9. 通过指定的 url 去网络或者文件服务器下载文件到本地某个文件夹

    /** * 从网络Url中下载文件 * @param urlStr 指定的url * @param fileName 下载文件到本地的名字 * @param savePath 本地保存下载文件的路径 ...

随机推荐

  1. USACO翻译:USACO 2013 NOV Silver三题

    USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...

  2. 20145337 GDB调试汇编堆栈过程分析

    20145337 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...

  3. 享元模式 - Flyweight

    Flyweight(享元模式) 定义 GOF:运用共享技术有效地支持大量细粒度的对象. GOF的定义比较专业化,通俗来说,当你有大量相似的实例时,你把其中相同的实例取出来共享. 例子 在你的游戏场景中 ...

  4. request对象和response对象

    Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...

  5. python网页抓取练手代码

    from urllib import request import html.parser class zhuaqu(html.parser.HTMLParser): blogHtml = " ...

  6. 分区里的inode号是0号和1号的block

    分区里的inode号是0号和1号的block 我相信大家在使用Linux的时候都遇到过误删文件系统数据的情况,不管是自己误删还是帮人家恢复误删 现在用的比较多的恢复工具大概是ext3grep .ext ...

  7. Expert 诊断优化系列------------------给TempDB 降温

    前面文章针对CPU.内存.磁盘.语句.等待讲述了SQL SERVER的一些基本的问题诊断与调优方式.为了方便阅读给出导读文章链接方便阅读: SQL SERVER全面优化-------Expert fo ...

  8. WPF+通过配置文件生成菜单(Menu)+源码

    这个月做项目,遇到过一个通过配置文件来生成菜单的解决方案,感觉挺优雅的,特地放到博客园来,以飨读者. 说来惭愧,以前做的项目都没有这样用过,都是固定死了.如果后续有需要加入菜单,还得在重新修改UI,然 ...

  9. Alljoyn瘦客户端库介绍(官方文档翻译 下)

    由于其他事情耽误,这个翻译现在才完成.接上篇—— 4 瘦客户端核心库架构 由于AllJoyn瘦客户端核心库(AJTCL)必须运行在那些功耗受限.计算能力有限.资源紧缺的设备上,因此它无法像运行在通用型 ...

  10. AngularJs之一

    在讲正题之前,先说一下有关angular简介方面的信息: 1. angularJS  诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用 ...