您的位置:首页 > 移动开发 > Android开发

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

2016-05-18 17:53 411 查看
最近项目中使用到文件缓存,在文件流使用的时候遇到一点坑,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 访问,也取不到任何数据了,被这一点坑了许久。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 文件操作