Android网络文件下载模块整理

一、知识基础

  tomcat服务器配置

  理解http协议

  理解javaIO操作相关知识

SDcard操作知识

  Android 权限配置

二、实现步骤

  1、从网上获取资源

 1 public String download(String urlStr) {
 2         StringBuffer sb = new StringBuffer();
 3         String line = null;
 4         BufferedReader buffer = null;
 5         try {
 6             // 创建一个URL对象
 7             url = new URL(urlStr);
 8             // 创建一个Http连接
 9             HttpURLConnection urlConn = (HttpURLConnection) url
10                     .openConnection();
11             // 使用IO流读取数据
12             buffer = new BufferedReader(new InputStreamReader(urlConn
13                     .getInputStream()));
14             while ((line = buffer.readLine()) != null) {
15                 sb.append(line);
16             }
17         } catch (Exception e) {
18             e.printStackTrace();
19         } finally {
20             try {
21                 buffer.close();
22             } catch (Exception e) {
23                 e.printStackTrace();
24             }
25         }
26         return sb.toString();
27     }
28
29     /**
30      * 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
31      */
32     public int downFile(String urlStr, String path, String fileName) {
33         InputStream inputStream = null;
34         try {
35             FileUtils fileUtils = new FileUtils();
36
37             if (fileUtils.isFileExist(path + fileName)) {
38                 return 1;
39             } else {
40                 inputStream = getInputStreamFromUrl(urlStr);
41                 File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream);
42                 if (resultFile == null) {
43                     return -1;
44                 }
45             }
46         } catch (Exception e) {
47             e.printStackTrace();
48             return -1;
49         } finally {
50             try {
51                 inputStream.close();
52             } catch (Exception e) {
53                 e.printStackTrace();
54             }
55         }
56         return 0;
57     }
58
59     /**
60      * 根据URL得到输入流
61      *
62      * @param urlStr
63      * @return
64      * @throws MalformedURLException
65      * @throws IOException
66      */
67     public InputStream getInputStreamFromUrl(String urlStr)
68             throws MalformedURLException, IOException {
69         url = new URL(urlStr);
70         HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
71         InputStream inputStream = urlConn.getInputStream();
72         return inputStream;
73     }
74 }

从网络下载文件

  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老师,表示感谢

时间: 2024-12-23 13:26:15

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

Android网络开启、关闭整理

近段时间由于要对手机网络状况进行判断.开启和关闭,从网上找了些资料,现整理如下 包含了对WiFi.GPRS.飞行模式的开启.关闭以及一些状态的检测,在小米和三星平板上测试均通过 [java] view plaincopy package com.my.device_admin.business; import java.lang.reflect.Method; import android.content.Context; import android.content.Intent; impor

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

android网络交互之DNS优化知识整理 之前的工作中,经常会遇到DNS解析出问题导致网络交互的操作无法正常进行. 在很多的移动开发过程中,与服务端的交互的url通常是包含域名的.而在实际的网络交互的过程中,第一步就需要对域名进行dns解析. 复杂的网络环境里面,dns解析会耗费很长的时间.甚至是解析失败.这是经常会发生的. 所以这一步的优化是非常至关重要的. 有那么一种方案叫:IP直连 就是在网络交互的过程中,跳过域名的DNS解析,直接用IP进行网络交互.可以避免这一大麻烦. 针对这一方案,

6、android 网络编程

1.基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s = svr.accept(); 取得输入和输出 DataInputStream dis = new DataInputStream(s.getInputStream()); DataOutputStream dos = new DataOutputStream(s.getOutputStream()

教你写Android网络框架之基本架构

转载请注明出处,本文来自[ Mr.Simple的博客 ]. 我正在参加博客之星,点击这里投我一票吧,谢谢~ 前言 在前段时间,偶然参加了博客之星的评选,也偶然的进入到了鸿洋和任玉刚两知名博主的开发群,感受到了很浓厚的技术探讨氛围,于是自己也冒出了写一些系列博客的想法.虽说本人水平有限,但是也希望自己的博客能够帮到一些需要帮助的人.需要你是高手,那么显然不适合你,就没有必要再看下去了.如果你对框架开发或者说Android网络请求不是很了解,每次要使用网络时都要到百度搜索一番,那么着可能是你需要的.

HTML5+规范:Downloader(管理网络文件下载任务)

Downloader模块管理网络文件下载任务,用于从服务器下载各种文件,并支持跨域访问操作.通过plus.downloader获取下载管理对象.Downloader下载使用HTTP的GET/POST方式请求下载文件,符合标准HTTP/HTTPS传输协议. 1.方法 1.1.createDownload: 新建下载任务 Download plus.downloader.createDownload( url, options, completedCB ); 说明:请求下载管理创建新的下载任务,创建

Android多线程文件下载器

本应用实现的是输入文件的网络的地址,点击按钮开始下载,下载过程中有进度条和后面的文本提示进度, 下载过程中按钮不可点击,防止重复的下载,下载完毕后会进行Toast的提示显示, 并且回复按钮的可点击性,进度条也会清空,当然如果下载中途结束应用进程就会进行进度的保存, 下次下载同样的文件时就会从进度记录进行下载,节省流量和时间 应用需要的应用权限: 访问网络权限 <uses-permission android:name="android.permission.INTERNET"/&

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

喜欢使用原生Android系统的朋友可能会发现自己的状态栏信号图标上经常有一个惊叹号标志. 这是怎么回事呢?原因是Android为了对网络状态进行检测,采用了一种叫做captive detection的方式进行网络状态检测. 其实说起来很简单,每当连接到一个网络,比如移动数据网络或者WIFI的时候,Android的NetworkMonitor模块会构造一个http的请求,发送到指定的服务器,然后利用收到的响应进行网络状态判断. 网络状态有如下几种状态: 1) 根本就没有返回,这种情况代表当前没有

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

针对Android面试中常见的一些知识点整理,Max 只是个搬运工,感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章,对于其中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正. 本文将持续更新,同时我也将其放在Github上:Point-of-Android 同时可以看Max的个人博客:海上钢琴师 Android中的异步任务机制 Android中AsyncTak的使用与源码分析 http://blog.csdn.net/bboyfeiyu/article/details/

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

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4063452.html 联系方式:[email protected] [正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍