Mars Android视频学习笔记——01_18_文件下载

来源:互联网 发布:linux 定时任务 编辑:程序博客网 时间:2024/06/10 19:32

转载时请注明转自:http://blog.csdn.net/sam_zhang1984

交流可加新浪微博:Android开发人

 

 

文件下载就涉及到两个问题:

1.         下载:使用网络协议下载文件,这里主要是讲利用 HTTP协议下载。

2.         保存:文件可以保存到手机内存,也可以下载到 SDCard,下到 SD 卡是比较常用的。

 

文件下载的主要步骤有:

1)  创建一个HttpURLConnection 对象。通过URL openConnection 方法,就可以得到一个 HttpURLConnection 对象,所以要先创建一个 URL 对象;

[java] view plaincopyprint?
  1. //得到一个URL对象   
  2.                 m_URL = new URL(strURL);  
  3.                 //由URL对象得到一个HttpURLConnection对象  
  4.                 urlConn = (HttpURLConnection)m_URL.openConnection();  

2)  通过HttpURLConnection 对象的getInputStream 方法可以得到一个InputStream 对象;

[java] view plaincopyprint?
  1. /*由HttpURLConnection对象的方法读出字节流,并转成InputStreamReader,InputStreamReader是字 
  2.                  * 节流通向字符流的桥梁: 它使用指定的 charset 读取 字节并将其解码为字符;最后再转成BufferedReader 
  3.                  * 这样就便于一行一行读数据了! 
  4.                  */  
  5.                 bufferR = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));   

3)  获取网络访问的权限。

 

[xhtml] view plaincopyprint?
  1. <uses-permission android:name="android.permission.INTERNET"/>  

文件保存(保存到SDCard ):

1)        得到设备SD 卡的目录:使用 Environment.getExternalStorageDirectory 得到SD 卡的目录;

[java] view plaincopyprint?
  1. //得到当前外部存储设备的目录   
  2.         // /SDCARD   
  3.         SDPATH = Environment.getExternalStorageDirectory() + "/";  

2)        获取访问SD 卡的权限;

 

[xhtml] view plaincopyprint?
  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

3)        SD 卡里写入文件,这里涉及到 JAVA 的文件操作。

 

SD 卡里面写入文件就涉及到了 JAVA IO 操作了,向卡里加入文件主要有以下几个步骤:

a)         创建存放文件的目录;

[java] view plaincopyprint?
  1. public File creatSDDir(String dirName) {  
  2.         File dir = new File(SDPATH + dirName);  
  3.         dir.mkdir();  
  4.         return dir;  
  5.     }  

b)        在目录中创建文件;

[java] view plaincopyprint?
  1. public File creatSDFile(String fileName) throws IOException {  
  2.         File file = new File(SDPATH + fileName);  
  3.         file.createNewFile();  
  4.         return file;  
  5.     }  

 

c)        根据文件对象创建一个OutPutStream 向文件里写入内容。

 

[java] view plaincopyprint?
  1.                         OutputStream output = null;  
  2.                         InputStream input;  
  3.                         file = creatSDFile(path + fileName);  
  4. output = new FileOutputStream(file);  
  5. byte buffer [] = new byte[4 * 1024];  
  6. while((input.read(buffer)) != -1){  
  7.     output.write(buffer);  
  8. }  

 

JAVA IO 操作各种类的记法:

1、  stream结尾的是字节流, reader writer结尾的是字符流;

2、  Buffer开头的是缓冲处理流;

3、  OutputSteamWriter:即是把一个输出字节流,转换成一个输了字符流。

4、  处理流方法名后面是stream ,则其参数是 Inputsteam 类型的字节流;如果处理流方法名后面是 reader writer,则其参数是 reader writer 类型的字符流;

IO流的操作相对比较复杂,方法、类型都比较多,还有得加强基础!

下面是一个好的IO编程习惯:

良好的编程习惯是先写flush ,再写 close。因为 close 直接就把数据流给释放掉,

但如果这时缓冲区里还有数据,就无法再向目标写入了,所以应该先调用flush 把缓冲区

的所有数据写到目的地。

[java] view plaincopyprint?
  1. try{  
  2.             .   
  3.                             .  
  4.                             .  
  5.                             .  
  6.                             .  
  7.             output.flush();  
  8.         }  
  9.         catch(Exception e){  
  10.             e.printStackTrace();  
  11.         }  
  12.         finally{  
  13.             try{  
  14.                 output.close();  
  15.             }  
  16.             catch(Exception e){  
  17.                 e.printStackTrace();  
  18.             }  
  19.         }  

0 0
原创粉丝点击