Android创建缓存文件并使用流读取
2016-05-18 17:53
411 查看
最近项目中使用到文件缓存,在文件流使用的时候遇到一点坑,Mark一下。
一、Android下创建应用缓存文件目录:
使用Context的getDir()方法,传入:
参数1:目录名;
参数二:模式(应用私有,还是公共)。
如果该目录存在,会返回一个对应的File对象;如果不存在,会创建该目录,并返回。
二、获取缓存文件
使用File对象的构造方法,取得需要的文件对象,但是该对象可能会不存在,如果是读取文件,需要使用以下方式来判断:(注意不要使用(null == file),文件不存在,也不返回null)
三、使用BufferedOutputStream对文件写入
BufferedOutputStream提供一个默认大小的缓冲区,缓冲输出流收集写入的字符以避免每次写入都引起对设备的访问,当缓冲区满或流被刷新时,数据被写入设备,能够提升文件操作的性能。定义一个文件输出流,使用如下方式即可:
new FileOutputStream(File file)),该构造方法新建一个指定文件的输出流(会自动删除已经存在的同名文件)。使用如下代码写入数据:
读取buffer内从offset往后length长的数据写入缓冲区,最后几段刷新并关闭输出流:
四、使用BufferedInputStream读取文件
代码如下:
读取前记得对文件file做判断 ,file.exists()。
注意:
在对输入流使用如下方式读取时:
程序执行到“11111”处时,bis 中数据已经处理完毕,这是再次对 bis 访问,也取不到任何数据了,被这一点坑了许久。
一、Android下创建应用缓存文件目录:
File path = context.getDir(String dirName, Context.MODE_PRIVATE);
使用Context的getDir()方法,传入:
参数1:目录名;
参数二:模式(应用私有,还是公共)。
如果该目录存在,会返回一个对应的File对象;如果不存在,会创建该目录,并返回。
二、获取缓存文件
File file = new File(File path, String fileName);
使用File对象的构造方法,取得需要的文件对象,但是该对象可能会不存在,如果是读取文件,需要使用以下方式来判断:(注意不要使用(null == file),文件不存在,也不返回null)
file.exists()
三、使用BufferedOutputStream对文件写入
BufferedOutputStream提供一个默认大小的缓冲区,缓冲输出流收集写入的字符以避免每次写入都引起对设备的访问,当缓冲区满或流被刷新时,数据被写入设备,能够提升文件操作的性能。定义一个文件输出流,使用如下方式即可:
BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(file));
new FileOutputStream(File file)),该构造方法新建一个指定文件的输出流(会自动删除已经存在的同名文件)。使用如下代码写入数据:
fos.write(byte[] buffer, int offset, int length);
读取buffer内从offset往后length长的数据写入缓冲区,最后几段刷新并关闭输出流:
fos.flush();//刷新 fos.close();
四、使用BufferedInputStream读取文件
代码如下:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
读取前记得对文件file做判断 ,file.exists()。
注意:
在对输入流使用如下方式读取时:
int len; byte[] buf = new byte[1024]; while ((len = bis.read(buf)) > 0) {//将数据从输入流bis读到内存buf fos.write(buf, 0, len);//将内存数据buf写入缓冲区fos } fos.flush();//将缓冲区数据fos写入到文件 fos.close(); ******************11111***************
程序执行到“11111”处时,bis 中数据已经处理完毕,这是再次对 bis 访问,也取不到任何数据了,被这一点坑了许久。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories