Android下载文件到SD卡

HttpURLConnection 上传方式:

尝试理解这两种流的区别:

InputStreamReader 的读取方式:

 1 //创建一个URL对象
 2 URL url = new URL(urlString);
 3
 4 //创建一个HttpURLConnection
 5 HttpURLConnetion urlConn = (HttpURLConnection)url.openConnecton();
 6
 7 //读取数据
 8 BufferReader buffer = new BufferReader(new InputStreamReader(urlConn.getInputStream()));
 9 StringBuffer sb = null;
10 String line = null;
11 while((line = buffer.readline()) != null){
12     sb.append(line);
13 }

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的空白数据  实际上有时候会影响文件的读取的  不过至少文件还是一个包含完整数据的文件

时间: 2024-10-10 15:26:03

Android下载文件到SD卡的相关文章

[android] 保存文件到SD卡

手机里面有两块空间,手机内部空间(/data/data/)和外部存储空间(/mnt/sdcard/ 或者直接/sdcard/) 与上面的代码基本一样,只是在new File(“/sdcard/文件名”),此时会报错,primission denied Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied) 在清单文件中添加权限 android.primission.WRITE_EXTERNAL_S

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

String SDPATH = Environment.getExternalStorageDirectory() + "/"; String path = SDPATH + "files/"; /** * 此文件支持下载docx,pdf,xls,jpg, * @param urlStr * @param path * @param fileName * @return * -1:文件下载出错 * 0:文件下载成功 * 1:文件已经存在 */ public int

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

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

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

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

Android学习之虚拟SD卡管理

继上一篇SD卡文件读取后,很多朋友表示如何新建并管理虚拟的SD卡呢?下面就让lz带大家了解下SD卡. 其实,要创建SD卡其实还是比较简单的.因为你下载的android的sdk包里面有tools文件夹 .通过它大家就可以创建自己的SD卡了.  具体步骤: 1 打开命令提示符 cmd 2 将根目录转移到你tools文件夹目录下. 3 运行该文件夹下的mksdcard.exe 4 在命令窗口输入 mksdcard 64m D:\avds\.android\avd\sdcard.img (上面的命令创建

Android中播放本地SD卡中歌曲需要的添加的权限

使用MediaPlayer播放本地Mp3文件时,需要注意的访问路径的问题以及访问权限的问题. 1.访问路径:/storage/emulated/0 此路径即为手机的根路径,可以通过下载ES文件浏览器软件查看当前播放的Mp3具体的路径,通过Environment.getExternalStorageDirectory().getPath()获取/storage/emulated/0这个SdCard路径这在组织 void android.media.MediaPlayer.setDataSource

Android -- 写xml到SD卡中

信息类                                                                                          private String body; private String number; private int type; private long id; 四个变量,然后有分别set和get.构造函数分别初始化这四个变量. 生成xml标签函数                                   

Android手机内存,SD卡读写

在手机上有两个存储位置 1 手机内部存储 2 SD卡 文件操作模式: 是否允许外部访问? 文件以覆盖/追加方式写? 手机内存读写 //保存文件到手机内存 public void save(String fileName,String content) throws IOException{ FileOutputStream fos = context.openFileOutput("a.txt", Context.MODE_PRIVATE); fos.write(content.get

Android设备内存和SD卡操作工具类

package cc.c; import java.io.File; import java.util.List; import android.os.StatFs; import java.io.FileReader; import java.io.IOException; import java.io.BufferedReader; import android.os.Environment; import android.content.Context; import android.ap