Android平台中实现数据存储的5种方式

2019-12-10 17:54:24刘景俊

 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); android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。

 除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。

 读取文件示例:

public void load()
{
 try {
 FileInputStream inStream=this.openFileInput("a.txt");
 ByteArrayOutputStream stream=new ByteArrayOutputStream();
 byte[] buffer=new byte[1024];
 int length=-1;
 while((length=inStream.read(buffer))!=-1) {
 stream.write(buffer,0,length);
 }


 stream.close();
 inStream.close();
 text.setText(stream.toString());
 Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show();
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 }
 catch (IOException e){
 return ;
 }

}