Android 笔记22 :I/O~文件下载,SDCard文件读、写(转)

本文介绍了如何使用Java从网络下载文件并保存到本地的过程。详细解释了InputStream与OutputStream的使用方法,包括建立HTTP连接、获取输入流、读取数据、写入文件等步骤。此外还讨论了处理大文件及实现下载进度显示的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://snmoney.blog.163.com/blog/static/440058201010222342599/

这里开始,有点让我这个菜鸟晕乎... 上午我甚至还没搞清楚 InputStream 是什么,和 OutputStream 有什么不同..


其实现在还没完全懂,emmm 先说个大概吧 字面意思理解了...数据流,是的


简单地说我想从网上下载个文件,然后保存到SDCard里,那么遵循的是下面这个大概的步骤。可以理解成从一个大水罐A里取水存到另一个空水罐B里


1. 要知道确切地 uri
2. 建立 HttpUrlConnection(还有URL.getContent等办法,不逐一列举),然后这里可以做一些确保工作之类的~~例如检测返回的状态码确保网络连通,目标文件不会404或者500之类
3. 可以 getInputStream , 于是得到一个is = InputStream //找到装满水的罐子A了,嘿
4. 然后~ 弄个 byte[] b, 用来做数据的搬运工具, InputStream.read(b) 这样读出来 //b就是杯子
5. 在同一时间创建一个 File f =new File(..路径..文件名) 还有 os = OutputStream(f) <-----留意这里,时间关系~我让outputstream 和f勾搭上了 //这是空罐子B
6. 开始 os.write(b) //水从A罐向B了
*7. 完成后可以很好习惯地 is.close(); os.close(); //把两个罐子的盖子盖上~省得被妈妈啰嗦

上面这种方法读小文件是不会有什么问题的,但如果是比较大的文件?尤其是手机上应用~网络很慢会怎样?如果要再贪心一点~想显示下载进度呢?


也就是说如果罐子里的水一杯装不完怎么办?出错了~


在 byte[]这里做做手脚 指定固定的大小,通过循环 read(b), write(b) 的方式就能把流数据切小段读取,但要设计好最后一杯不是满杯的,用write(btye[] b, int start,int count);这个方法能保证不会倒入多余的不明液体~嘿嘿嘿
另外,对http连接获取内容大小,循环的时候知道每杯的容量,每次循环...进度多少也就心里有底了~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值