文件下载的步骤:

1、创建一个HttpURLConnection对象

HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();

2、获得一个InputStream()对象

urlConn.getInputStream();

3、访问网路的权限

android.permission.INTERNET

现做一个小程序如下,能够下载文本文件和Mp3文件

main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     tools:context=".Download_Activity" >
 7
 8     <Button
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         android:id="@+id/downloadText"
12         android:text="@string/downloadTextButton"/>
13     <Button
14         android:layout_width="fill_parent"
15         android:layout_height="wrap_content"
16         android:id="@+id/downloadMp3"
17         android:text="@string/downloadMp3Button"/>
18 </LinearLayout>

Download_Activity.java

 1 package zzl.download;
 2
 3 import zzl.utils.HttpDownload;
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9
10 public class Download_Activity extends Activity {
11
12     private Button downloadMp3Button;
13     private Button downloadTextButton;
14     @Override
15     public void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.main);
18         downloadMp3Button=(Button)findViewById(R.id.downloadMp3);
19         downloadTextButton=(Button)findViewById(R.id.downloadText);
20         downloadMp3Button.setOnClickListener(new DownloadMp3Listener());
21         downloadTextButton.setOnClickListener(new DownloadTextListener());
22     }
23     class DownloadTextListener implements OnClickListener{
24
25         @Override
26         public void onClick(View v) {
27             // TODO Auto-generated method stub
28             HttpDownload httpDownloader=new HttpDownload();
29             String lrc =httpDownloader.download("http://photo.weibo.com/152611965/wbphotos/large/photo_id/3549709337146075?refer=weibofeedv5");
30             System.out.println(lrc);
31         }
32     }
33     class DownloadMp3Listener implements OnClickListener{
34
35         @Override
36         public void onClick(View v) {
37             // TODO Auto-generated method stub
38             HttpDownload httpDownloader=new HttpDownload();
39             int result =httpDownloader.downloadFile("http://photo.weibo.com/152611965/wbphotos/large/photo_id/3549709337146075?refer=weibofeedv5","photo_id/","3549709337146075?refer=weibofeedv5");
40             System.out.println(result);
41         }
42     }
43
44 }

HttpDownload.java

 1 package zzl.utils;
 2
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.InputStreamReader;
 8 import java.net.HttpURLConnection;
 9 import java.net.URL;
10
11
12 /*前提:首先判断所下载的文件是否为纯文本文件
13  * 1.创建一个URL对象
14  * 2.通过URL对象获取HttpOpenConnection对象(代表和网络上的http对象的连接)
15  * 3.获取InputStream对象
16  * 4.读取数据
17  * 5.将读取的数据写入SD卡
18  * */
19 public class HttpDownload {
20     private URL url = null;
21
22     //下载任何形式 的文本文件
23     public String download(String urlStr){
24         StringBuffer sb = new StringBuffer();
25         String line = null;
26         BufferedReader bufr = null;
27
28         try {
29             // 创建一个URL对象:调用URL函数,将地址传入
30             url = new URL(urlStr);
31             //通过URL创建一个HTTP连接
32              HttpURLConnection con =  (HttpURLConnection)url.openConnection();
33             //使用IO流读取数据,这里使用到了转换流,提高读取效率  【【 字节流转换成字符流再转换成读取行数据】】
34             bufr = new BufferedReader(new InputStreamReader(con.getInputStream()));
35             while((line = bufr.readLine())!=null){
36                 sb.append(line);
37             }
38
39         } catch (Exception e) {
40             System.out.println("文本文件下载失败!");
41             e.printStackTrace();
42         }finally{
43             if(bufr!=null)
44                 try {
45                     bufr.close();
46                 } catch (IOException e) {
47                     System.out.println("文本文件读取流关闭失败!");
48                     e.printStackTrace();
49                 }
50         }
51         return sb.toString();
52
53     }
54     //访问SD卡
55     /* 1.得到当前设备SD卡的目录
56      *     Environment.getExternalStorageDirectory()
57      * */
58     //可下载各种文件
59     //返回 -1:代表下载文件出错        返回0:代表下载文件成功             返回 1:代表文件已经存在
60     //fileName代表你将要存入SD卡中的文件名,可以定义自己的文件名
61     public int downloadFile(String url,String path,String fileName){
62         InputStream in = null;
63         try {
64             File_Utils utils = new File_Utils() ;
65             //如果存在该文件了则返回1
66             if(utils.isFileExist(path+fileName)){
67                 return 1;
68             }else{//否则则就获得否则则就通过调用File_Utils.java的write2SDFromInputStream函数写入SD卡中
69                 in = getInputStreamFromUrl(url);
70                 File resultFile = utils.write2SDFromInputStream(path, fileName, in);
71                 if(resultFile == null){
72                     return -1;
73                 }
74             }
75
76         } catch (IOException e) {
77             e.printStackTrace();
78             return -1;
79         }finally{
80             if(in!=null){
81             try {
82                 in.close();
83             } catch (IOException e) {
84                 System.out.println("字节读取流关闭失败!");
85                 e.printStackTrace();
86               }
87             }
88         }
89         return 0;
90     }
91
92     //将根据URL获取InputStream的功能封装起来,以便复用
93     public InputStream getInputStreamFromUrl(String urlStr) throws IOException{
94             url = new URL(urlStr);
95             HttpURLConnection con =  (HttpURLConnection) url.openConnection();
96             InputStream in = con.getInputStream();
97             return in;
98     }
99 }

File_Utils.java

 1 package zzl.utils;
 2
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8
 9 import android.os.Environment;
10
11 public class File_Utils {
12     private String SDPATH;
13     public File_Utils(){
14         SDPATH = Environment.getExternalStorageDirectory()+"/";
15     }
16     //得到当前外部存储设备的目录
17     public String getSDPATH(){
18         return SDPATH;
19     }
20
21     //在SD卡上创建文件:
22     public File createSDFile(String dirAndFilename) throws IOException{
23         File file = new File(SDPATH+dirAndFilename);
24         file.createNewFile();
25         return file;
26     }
27
28     //在SD卡上创建目录
29     public File createSDDir(String dirName){
30         File dir = new File(SDPATH+dirName);
31         dir.mkdirs();
32         return dir;
33     }
34     //判断SD卡上的文件夹是否存在
35     public boolean isFileExist(String fileName){
36         File file = new File(SDPATH + fileName);
37         return file.exists();
38     }
39
40     //将一个InputStream里面的数据写到SD卡中
41     public File write2SDFromInputStream(String path,String fileName,InputStream in){
42         File file = null;
43         OutputStream out = null;
44         try {
45             createSDDir(path);
46             try{file = createSDFile(path+fileName);}
47             catch(Exception e){
48                 System.out.println("createSDFile 失败");
49             }
50
51             out = new FileOutputStream(file);
52             byte buf[] = new byte[1024*5];
53             int ch = 0;
54             while((ch = in.read(buf))!=-1){
55                 out.write(buf);
56             }
57             out.flush();
58
59         } catch (IOException e) {
60             System.out.println("SD写入失败!");
61             e.printStackTrace();
62         }finally{
63             if(out!=null)
64                 try {
65                     out.close();
66                 } catch (IOException e) {
67                     e.printStackTrace();
68                     System.out.println("SD写入流关闭失败!");
69                 }
70         }
71         return file;
72     }
73
74 }

总结:

1、要达到连接网络的效果,需要在download  Manifest 中加入下面三句代码:

<uses-sdk android:minSdkVersion="4"/>
       <uses-permission android:name="android.permission.INTERNET"/>
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2、因为不是真正的连接到网路,测试的时候需要在cmd中输入adb  shell 进行验证,当然这个的操作我们之前在SQlite那一节中介绍过了

3、总的整节视频看下来,总觉得还是很多东西没有消化的,很多mars老师自己写的东西,很多函数的调用还有一些不是很了解的,还是需要再研究一下的。

4、点击下载文本文件,效果如下:

而下载Mp3文件则还是有一定的bug,还需要再调试调试。

Android 学习 笔记_05. 文件下载相关推荐

  1. Android学习笔记21:ImageView获取网络图片

    Android平台有3种网络接口可以使用,它们分别是:java.net.*(标准java接口).org.apache(Apache接口)和android.net.*(Android网络接口).本文将使 ...

  2. Android学习笔记(七):多个Activity和Intent

    根据www.mars-droid.com:Andriod开发视频教学,先跳过书本<Beginning Android 2>的几个章,我是这两个资源一起看,需要进行一下同步.先初步了解一下应 ...

  3. Android学习笔记26:图片切换控件ImageSwitcher的使用

    在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...

  4. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  5. Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 ...

  6. Android学习笔记:TabHost 和 FragmentTabHost

    2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget ...

  7. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  8. Android学习笔记:TabHost 和 FragmentTabHost(转)

    Android学习笔记:TabHost 和 FragmentTabHost(转) 转自:http://www.cnblogs.com/asion/p/3339313.html 作者:Asion Tan ...

  9. Pro Android学习笔记(三三):Menu(4):Alternative菜单

    什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供 ...

最新文章

  1. python程序如何执行死刑图片_如何判断对象已死
  2. 自己动手实现OpenGL之glViewPort(一)
  3. LSTM UEBA异常检测——deeplog里其实提到了,就是多分类LSTM算法,结合LSTM预测误差来检测异常参数...
  4. 【OpenCV3】阈值化操作——cv::threshold()与cv::adaptiveThreshold()详解
  5. java元空间扩容_JVM元空间(Metaspace)
  6. HDOJ 2546饭卡(01背包问题)
  7. 金融计算器 npv_一个工具箱 之 净现值(NPV)计算器
  8. Jon Wexler and adidas NMD R1 Primeknit Zebra Pack
  9. APUE 学习笔记(十) 高级I/O
  10. 函数对象、对象、原型
  11. 线报天下 2021 (免费补丁) 原创工具
  12. frida-trace入门
  13. 服务器宕机是什么意思怎处理解决?
  14. 单片机篮球记分牌c语言程序和实训报告,单片机实现篮球记分牌的设计
  15. SSE Intrinsics各函数介绍
  16. 2020年中国研究生数学建模竞赛C题
  17. 现代密码学期末复习26问
  18. “嫦娥四号”探测器凌晨发射,中国探月计划第二阶段进入尾声
  19. 高级灰+中国红,这才是家应该有的样子
  20. C++020-C++因数,公因数,公倍数

热门文章

  1. 第一个 Rails App 从安装到创建(windows版本)
  2. fetch git pull 切换_git fetch git pull
  3. bigdecimal保留4位小数_四年级数学小数的加减乘法知识点汇总,带练习!
  4. C语言1094题目,基于visual Studio2013解决C语言竞赛题之1094纵横图
  5. matlab 刻度非均匀控制,MATLAB 出一张好看的图
  6. testng连接MySQL_Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布
  7. 把java复制到e_编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下...
  8. java语言概述、java语言特性、java语言发展史、java语言作用
  9. 启动kafka失败报内存不足(Cannot allocate memory)
  10. Bulk API实现批量操作