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卡的更多相关文章

  1. android 写文件到sd卡问题小记

    android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...

  2. 从网络上下载文件到sd卡上

    String SDPATH = Environment.getExternalStorageDirectory() + "/"; String path = SDPATH + &q ...

  3. [android] 保存文件到SD卡

    /****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...

  4. android保存文件到SD卡中

    想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...

  5. Android 下载文件及写入SD卡

    Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  6. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  7. android之写文件到sd卡

    1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  8. android复制数据库到SD卡(网上搜集,未经验证)

    android中使用sqlite.复制assets下的数据库到SD卡.支持大于1M的文件 如果使用SD卡,需要在AndroidManifest.xml中设置权限 <uses-permission ...

  9. Android中播放本地SD卡中歌曲须要的加入的权限

    使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...

随机推荐

  1. C#开发实例 鼠标篇

    鼠标的操作控制: 鼠标是计算机的一个重要组成部分,有很多默认的设置,如双击时间间隔,闪烁频率,移动速度等,本篇使用C#获取这些基本的信息. 1.1获取鼠标信息 ①实例001 获取鼠标双击时间间隔 主要 ...

  2. apache virtualhost配置 apache配置多个网站

    第一步 apache下httpd.conf文件 启用模块LoadModule vhost_alias_module modules/mod_vhost_alias.so 第二步 apache下http ...

  3. Java for LeetCode 076 Minimum Window Substring

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  4. hdu 1050 Moving Tables 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 这道题目隔了很久才做出来的.一开始把判断走廊有重叠的算法都想错了.以为重叠只要满足,下一次mov ...

  5. 【leetcode】clone-graph

    写在前面的话: 看了看自己的博客,从一月底开始就没怎么更新过,我也确实将近5个月没怎么写代码了.今天突然觉得有些心慌,感觉手都已经生疏了.果然,随便找了道题就卡住了.隐约感觉要用map但又不太记得用法 ...

  6. hadoop的关键进程

    hadoop集群中主要进程有master:   NameNode, ResourceManager,slaves:   DataNode, NodeManager,  RunJar, MRAppMas ...

  7. CSS选择器以及优先级与匹配原理

    最常用的五类CSS选择器 准确而简洁的运用CSS选择器会达到非常好的效果.我们不必通篇给每一个元素定义类(class)或ID,通过合适的组织,可以用最简单的方法实现同样的效果.在实际工作中,最常用的选 ...

  8. [原]C# Winform 文件编码批量转换工具

    在发布产品程序包时,往往需要对程序文件进行编码检查,写了一个可以批量修改文件编码格式的辅助工具,希望对有同样需求的童鞋有帮助. 1.程序界面: 2.核心代码: /// <summary> ...

  9. WPF MVVM 关闭View

    在ViewModel中定义一个变量: private Action _closeAction; 在ViewModel的构造函数中这样定义:public MainWindowViewModel(Acti ...

  10. C# 从入门到精通

    int i=null; int? i=null; 我们用一个问号 来指定这个值类型是可空的 属性是只读的