android 数据存储

来源:互联网 发布:制造头像软件下载 编辑:程序博客网 时间:2024/06/07 09:23

一:Shared Preferences:用来存储私有的、原始类型的、简单的数据,通常是Key-value对

二:Internal Storage:在设备内部存储器中存储数据

三:External Storage:在设备的扩展存储上保存数据,通常是SD卡


一. Shared Preferences 

//写入    注意:所有的写入操作应该在一个Editor里面,也就是不要调用多次sp.edit()方法,每调用一次就会创建一个EditorSharedPreferences sp =getSharedPreferences("SP",Activity.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();editor.putString("param1", "sp1");editor.putInt("param2", 222);editor.commit();//读取SharedPreferences sp =T2.this.getSharedPreferences("SP",Activity.MODE_PRIVATE);String p1 = sp.getString("param1","");int p2 = sp.getInt("param2",0);//清除指定数据SharedPreferences userSettings= getSharedPreferences("setting", 0);SharedPreferences.Editor editor = userSettings.edit();editor.remove("KEY");editor.commit();//清空数据SharedPreferences.Editor editor = userSettings.edit();editor.clear();editor.commit();

 SharedPreferences的数据以xml存储在data/data/包名/shared_prefs下面

1:getSharedPreferences():如果你想要使用多个preferences文件的话,可以通过传入一个识别的名称就可以获取到相应的SharedPreferences对象

2:getPreferences():如果一个preferences文件仅仅在当前的Activity中使用的话,你可以使用这个方法,无需要提供识别的名称。getPreferences(int mode)不需要传递文件名,默认使用不带包名的类名作为文件名(即Activity java文件名,不带后缀)

两者的具体区别请看 http://blog.csdn.net/a591193965/article/details/51105298

Activity.MODE_PRIVATE:表示该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Activity.MODE_APPEND:也是私有数据,新写入的内容会追加到原文件中
Activity.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取
Activity.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

二:Internal Storage

当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于Android系统的/data/data/<应用程序包名>目录下,其他的应用程序都无法向这个文件夹中写入数据。

要读取应用自己的私有文件,就不能直接使用Java I/O的API了,需要使用Activity提供的方法:openFileInput或openFileOutput。

在使用openFileOutput方法的时候,需要指定打开的模式:
1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_APPEND:如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原来的数据。
3:MODE_WORLD_READABLE:赋予所有的应用程序对该文件读的权限。
4:MODE_WORLD_WRITEABLE:赋予所有的应用程序对该文件写的权限。

//openFileOutput的调用返回一个FileOutputStream对象String username = mUsernameET.getText().toString();                String password = mPasswordET.getText().toString();                  FileOutputStream fos = null;                  try {                      fos = openFileOutput("login", MODE_PRIVATE);// 获得文件输出流                      fos.write((username + " " + password).getBytes());// 保存用户名和密码                      fos.flush();// 清除缓存                  } catch (FileNotFoundException e) {                      e.printStackTrace();                  } catch (IOException e) {                      e.printStackTrace();                  } finally {                      if (fos != null) {                          try {                              fos.close();// 关闭文件输出流                          } catch (IOException e) {                              e.printStackTrace();                          }                      }                  } //openFileInput的调用返回一个FileInputStream 对象FileInputStream fis = null;          byte[] buffer = null;          try {              fis = openFileInput("login");// 获得文件输入流              buffer = new byte[fis.available()];// 定义保存数据的数组              fis.read(buffer);// 从输入流中读取数据          } catch (FileNotFoundException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          } finally {              if (fis != null) {                  try {                      fis.close();// 关闭文件输入流                  } catch (IOException e) {                      e.printStackTrace();                  }              }          }            String data = new String(buffer);// 获得数组中保存的数据          String username = data.split(" ")[0];// 获得username          String password = data.split(" ")[1];// 获得password            mUsernameTV.setText("账号:" + username);// 显示用户名          mPasswordTV.setText("密码:" + password);// 显示密码  



原创粉丝点击