Android创建缓存文件并使用流读取

来源:互联网 发布:阿里云和腾讯云的区别 编辑:程序博客网 时间:2024/05/11 04:30

最近项目中使用到文件缓存,在文件流使用的时候遇到一点坑,Mark一下。

一、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 访问,也取不到任何数据了,被这一点坑了许久。

0 0
原创粉丝点击