Android下载文件到SD卡
HttpURLConnection 上传方式:
尝试理解这两种流的区别:
InputStreamReader 的读取方式:
//创建一个URL对象
URL url = new URL(urlString); //创建一个HttpURLConnection
HttpURLConnetion urlConn = (HttpURLConnection)url.openConnecton(); //读取数据
BufferReader buffer = new BufferReader(new InputStreamReader(urlConn.getInputStream()));
StringBuffer sb = null;
String line = null;
while((line = buffer.readline()) != null){
sb.append(line);
}
InputStream 的读取方式:
//创建一个URL对象
URL url = new URL(urlString); //创建一个HttpURLConnection
HttpURLConnection urlConn =(HttpURLConnection)url.openConnection(); //获取一个InputStream
InputStream inputStream = urlConn.getInputStream(); //获取SD卡的路径
String SDPath = Environment.getExternalStorageDirectory() + "/"; //创建要使用的文件夹
File dir = new File(SDPath + dirName);
dir.mkdirs(); //创建输出文件
File file = new File(SDPath + dirName + fileName);
file.createNewFile(); //创建一个文件输出流
OutputStream output = new FileOutputStream(file); //建立缓冲
byte[] buffer = new byte[1*1024]; //Stream读取索引
int downloadNum = 0; //将输入流写到文件当中
while((downloadNum = inputStream.read(buffer)) != -1){
output.write(buffer, 0, downloadNum);
}
output.flush();
在文件下载到sd卡上时,output.write(buffer);这句代码是绝对有问题的,会导致文件已损坏。所以要处理下。
因为假设你每次读40kb的数据 对于一个76kb的文件来说 最后一次读取buffer里面只有76-40=36kb而已
然而你依然网文件里面写入40kb的数据 导致文件末尾有4kb的空白数据 实际上有时候会影响文件的读取的 不过至少文件还是一个包含完整数据的文件
Android下载文件到SD卡的更多相关文章
- android 写文件到sd卡问题小记
android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...
- 从网络上下载文件到sd卡上
String SDPATH = Environment.getExternalStorageDirectory() + "/"; String path = SDPATH + &q ...
- [android] 保存文件到SD卡
/****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...
- android保存文件到SD卡中
想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...
- Android 下载文件及写入SD卡
Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- android之写文件到sd卡
1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- android复制数据库到SD卡(网上搜集,未经验证)
android中使用sqlite.复制assets下的数据库到SD卡.支持大于1M的文件 如果使用SD卡,需要在AndroidManifest.xml中设置权限 <uses-permission ...
- Android中播放本地SD卡中歌曲须要的加入的权限
使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...
随机推荐
- haartraining生成.xml过程
继续向大神学习http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html
- HDU 1710 二叉树的遍历 Binary Tree Traversals
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- 浅析django的abstract,proxy, managed
django.db.models.Model 的 Meta参数 参数 类型 说明 继承 abstract boolean 是否建表 不继承,子类自动充值为默认值(False) managed bool ...
- 详解mysql int类型的长度值问题
我的朋友海滨问我mysql在建表的时候int类型后的长度代表什么? 是该列允许存储值的最大宽度吗? 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道int(1),这个 ...
- Launchpad添加openPGP keys
转自: https://help.ubuntu.com/community/GnuPrivacyGuardHowto mac下: http://notes.jerzygangi.com/the-bes ...
- MSSQL 2008错误提示:更改对于登录sa失败
MSSQL 2008错误提示:更改对于登录sa失败: 使用Windows方式登录数据库后,执行以下命令: EXEC sp_password null,"123456"," ...
- IDEA 14快捷键
1.ctrl+alt+左箭头.右箭头:返回到上次浏览的代码处(相当于Eclipse的alt+左右箭头) 编辑类: Ctrl+Space 基本代码实例(类.方法.变量) Ctrl + Shift + S ...
- Java for LeetCode 026 Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...
- IOS多线程(GCD)
简介 Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首次 ...
- 告别div,可以代替div的几个标签
几个最常用的用来代替DIV的HTML5元素 虽说html5中大多数功能性的元素如<video><canvas><audio>等还得不到当前主流浏览器的支持(主要就是 ...