一、知识基础

  tomcat服务器配置

  理解http协议

  理解javaIO操作相关知识

SDcard操作知识

  Android 权限配置

二、实现步骤

  1、从网上获取资源

 public String download(String urlStr) {
         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 e) {
             e.printStackTrace();
         } finally {
             try {
                 buffer.close();
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         return sb.toString();
     }

     /**
      * 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
      */
     public int downFile(String urlStr, String path, String fileName) {
         InputStream inputStream = null;
         try {
             FileUtils fileUtils = new FileUtils();

             if (fileUtils.isFileExist(path + fileName)) {
                 return 1;
             } else {
                 inputStream = getInputStreamFromUrl(urlStr);
                 File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream);
                 if (resultFile == null) {
                     return -1;
                 }
             }
         } catch (Exception e) {
             e.printStackTrace();
             return -1;
         } finally {
             try {
                 inputStream.close();
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         return 0;
     }

     /**
      * 根据URL得到输入流
      *
      * @param urlStr
      * @return
      * @throws MalformedURLException
      * @throws IOException
      */
     public InputStream getInputStreamFromUrl(String urlStr)
             throws MalformedURLException, IOException {
         url = new URL(urlStr);
         HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
         InputStream inputStream = urlConn.getInputStream();
         return inputStream;
     }
 }

从网络下载文件

  2、将资源写入SDcard

public class FileUtils {
    private String SDPATH;

    public String getSDPATH() {
        return SDPATH;
    }
    public FileUtils() {
        //得到当前外部存储设备的目录
        // /SDCARD
        SDPATH = Environment.getExternalStorageDirectory() + "/";
    }
    /**
     * 在SD卡上创建文件
     *
     * @throws IOException
     */
    public File creatSDFile(String fileName) throws IOException {
        File file = new File(SDPATH + fileName);
        file.createNewFile();
        return file;
    }

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

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

    /**
     * 将一个InputStream里面的数据写入到SD卡中
     */
    public File write2SDFromInput(String path,String fileName,InputStream input){
        File file = null;
        OutputStream output = null;
        try{
            creatSDDir(path);
            file = creatSDFile(path + fileName);
            output = new FileOutputStream(file);//写入数据
            byte buffer [] = new byte[4 * 1024];
            while((input.read(buffer)) != -1){
                output.write(buffer);
            }
            output.flush();
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            try{
                output.close();
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
        return file;
    }

}

SDCard 读写操作

三、版本说明

  程序源码来源Mars老师,表示感谢

Android网络文件下载模块整理的更多相关文章

  1. android网络交互之DNS优化知识整理

    android网络交互之DNS优化知识整理 之前的工作中,经常会遇到DNS解析出问题导致网络交互的操作无法正常进行. UnknownHostException 在很多的移动开发过程中,与服务端的交互的 ...

  2. 爱了,字节跳动大神最佳整理:582页Android NDK七大模块学习宝典,理论与实践

    前言 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,而且薪资水涨船高,以一线城市为例,音视频工程开发的薪资比Android应用层开发高出40%. 但 ...

  3. 6、android 网络编程

    1.基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s  ...

  4. 浅论Android网络请求库——android-async-http

    在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Insta ...

  5. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. 如何消除原生Android网络状态上的惊叹号

    喜欢使用原生Android系统的朋友可能会发现自己的状态栏信号图标上经常有一个惊叹号标志. 这是怎么回事呢?原因是Android为了对网络状态进行检测,采用了一种叫做captive detection ...

  7. Android网络多线程断点续传下载

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  8. Android 网络教程: 开始

    原文:Android Networking Tutorial: Getting Started 作者:Eunice Obugyei 译者:kmyhy 从 API 级别 1 开始,网络始终是 Andro ...

  9. 【Android 面试基础知识点整理】

    针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...

随机推荐

  1. iOS---stringByAddingPercentEscapesUsingEncoding:' is deprecated: first deprecated in iOS 9.0 - Use -stringByAddingPercentEncodingWithAllowedCharacters: instead,

    旧方法 NSString *encoded = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; iOS9   ...

  2. Android客户端与Eclipse服务器端的Socket通信

    Server端代码 用来实现客户端socket的监听 package MyServer; import java.io.BufferedReader; import java.io.BufferedW ...

  3. 触屏touchstart 与 click

    设计效果:当手指点击或触摸红框线menuList之外的部分时,弹框menuList消失. 问题:在优化触屏版的时候发现如图问题,当menuList弹出,手指触摸屏幕向下滑动时,menuList弹框不消 ...

  4. Linux命令学习总结:rmdir

    命令简介: 该命令用用来删除空目录,如果目录非空,则会出现错误.可以使用rm删除目录中的文件后,使用rmdir删除目录.也可以使用rm -rf替代rmdir命令.这是一个非常简单的命令.   命令语法 ...

  5. VS2015 Git使用教程——优化项目编辑日志

    一.前言 公司项目中,修改日志管理是一件很繁琐的事情,而且项目维护时间长了,会遗留下各种有用或无用的日志,对于有代码洁癖的人来说,无疑是一种灾难. 1.公司日志记录结构: 2.Git日志记录结构: 二 ...

  6. Linux iptables 防火墙

    内容摘要 防火墙 防火墙定义 防火墙分类 netfilter/iptables netfilter 设计架构 iptables 简述 iptables 命令详解 命令语法 table 参数 comma ...

  7. Silicon Labs

    Silicon Labs(美国芯科实验室)总部位于美国德克萨斯州的奥斯汀,成立于1996年,拥有全球化的运营.销售和研发团队,是一家业界领先的高性能混合信号IC供应商,为业界提供易用的高度集成化产品方 ...

  8. KAFKA一异常处理记录

    kafka-console-consumer.sh --topic TOPIC_KEYWORD --from-beginning --zookeeper localhost报异常,Exception ...

  9. [WPF系列]-Adorner

      简介 通常我们想对现有的控件,做些修饰时我们就会想到一个装饰模式.WPF中也提供了这样的实现思路:通过将Adorner添加到AdornerLayer中来实现装饰现有控件的效果.如图示:   本来T ...

  10. winform/窗体鼠标事件编程中的几个问题

    1.进行.net窗体的开发,经常用到鼠标事件,如MouseDown/MouseUp/MouseMove/MouseClick等.可是有时候给控件添加鼠标事件,就是不响应,怎么办呢! 答案:1.控件是否 ...