刚开始学习安卓不久遇到很多问题,之前的JAVA学的很差,特别是I/O流不太明白。在这稍微记录一下思路,以后方便回忆。
private void save(String inputText) {
FileOutputStream fileOutputStream = null; //创建一个字节输出流
BufferedWriter writer = null;
try {
fileOutputStream = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
writer.write(inputText);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这段主要实现了一个save函数,将传入的字符串进行保存。首先使用FileOutputStream创建了一个空的输出字节流,之后用BufferedWriter创建了一个写入缓冲区,默认大小8192个字节。之后利用openFileOutput方法,这是Activity自带的一个方法,这个方法返回一个FileOutputStream对象,关于这个方法的具体介绍:
openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为: Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openFileOutput(“itcast.txt”, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
之后调用BufferedWriter的构造方法将BufferedWriter实例化,其中又调用了OutputStreamWriter。关于OutputStreamWriter实际上是一个从字节流到字符流的一个桥接。之后调用BufferedWriter对象的write方法将目标字符串写到指定的文件中去。