Android SDK : Local Datas Storage

来源:互联网 发布:算法结构 编辑:程序博客网 时间:2024/06/07 19:29

Android中三种数据存储方式:

  • SharedPreferences:轻量键-值方式存储,以xml文件方式保存

  • file management:采用java.io.*库所提供的I/O接口读写文件

  • SQLite databases:SQLite是轻量级嵌入式内置数据库

Android SharedPreferences的使用介绍

    SharedPreferences是轻量级的数据保存方式;通过SharedPreferences可以将NVP(Name/Value Pair, 名称/值对)保存在Android的文件系统中,而且SharedPreferences完全屏蔽了对文件系统的操作过程;开发人员通过SharedPreferences对NVP进行保存和读取;

访问模式/数据共享

  • 私有(Context.MODE_PRIVATE):数据只能被本应用读取
  • 全局读(Context.MODE_WORLD_READABLE)数据能被其他应用程序读,但不能写
  • 全局写(Context.MODE_WORLD_WRITEABLE)数据能被其他应用程序写,但不能读

获取SharedPreferences对象

  1. 定义SharedPreferences访问模式

    • 下面的代码将访问模式定义为私有模式
      public static int MODE = MODE_PRIVATE;

    • 有时候需要将SharedPreferences的访问模式设定为既可以全局读,也可以全局写
      public static int MODE = Context_MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;

  2. 定义SharedPreferences文件名,这个文件名称与在Android文件系统中保存的文件同名

    • public static final String PREFERENCE_NAME = "SaveSetting";
  3. 将访问模式和SharedPreferences名称做为参数,传递到getSharedPrerences()函数,并获取到SharedPrerences对象

    • SharedPreferences sharedPreferences = getSharedPreferences(PREFERECES_NAME, MODE);

数据的写入

  1. 利用前面获取SharedPreferences对象的edit()方法获的它对应的Editor对象

  2. 利用Editor对象提供的PutXXX方法写入数据

  3. 调用Editor对象提供的commit()方法提交修改数据

SharedPreferences.Editor editor = sharedPreferences.edit();editor.putString("Name","Tom");editor.putInt("Age",20);editor.putFloat("height",(float) 1.70);editor.commit();

SharedPreferences.Editor clear() 清除所有数据

数据的读取

  1. 调用getSharedPreferences()函数,并在函数的第一个参数中指明需要访问的SharedPreferencs的名称

  2. 通过getXXX()函数获取保存在SharedPreferences中的NVP

SharedPreferences sharedPreferences = getSharedPreferences(PRIVATE_NAME, Mode);String name = sharedPreferences.getString("Name","");int age = sharedPreferences.getInt("Age", );float height = sharedPreferences.getFloat("Height", );
  • getXXX()函数第一个参数是NVP的名称

  • 第二个参数是在无法获取到数值的时候使用缺省值

数据的结构、位置和注意事项

  • 其实,每装一个应用程序时,SharedPreferences文件就保存在data/data/< package name > /shared_prefs目录下,其中的文件就是我们的数据

  • dataStore.xml文件是以XML格式保存的信息,内容如图:

  • 访问其他应用程序数据需要满足三个条件:

    1. 共享者将SharedPreferences的访问模式设置为全局读或全局写

    2. 访问者知道应用程序包名和SharedPreferences的名称

      • 通过Context获取SharedPreferences对象
    3. 访问者确切知道每个数据的名称和数据类型

文件存储

    Android允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部储存器上面,在linux系统下的data/data/< packagename >/files 目录中。

Android支持标准java的IO流体系

  • FileInputStream类

  • FileOutputStream类

Context提供了能够简化读写流式文件过程的函数

  • openFileOutput():打开文件输入流

  • openFileInput():打开文件输出流

openFileOutput()函数

  • openFileOutput()函数用于写入数据。如果指定的文件夹不存在,则创建一个新的文件。

  • public FileOutputStream openFileOutput(String name, int mode)

    • 第一个参数是文件名称,这个参数不可以包含描述路径的斜杠

    • 第二个参数是操作模式

    • 函数的返回值是FileOutputStream类型(字节流)

Android系统支持四种文件操作模式

模式 说明 MODE_PRIVARE 私有模式,文件仅能够被文件创建程序访问,或具有相同的UID的程序访问 MODE_APPEND 追加模式,如果文件已经存在,则在文件的结尾处添加新数据 MODE_WORLD_READABLE 全局读模式,允许任何程序读取私有文件 MODE_WORLD_WRITEABLE 全局写模式,允许任何程序写入私有文件

使用openFileOutput()函数建立新文件的示例代码如下

  1. String FILE_NAME = "fileDemo.txt"
  2. FileOutputStream fos = openFileOutput(FILE_NAME,Context.Mode_PRIVATE);
  3. String text = "some data";
  4. fos.write(text.getBytes());
  5. fos.flush();
  6. fos.close();

    • 第1行代码定义了建立文件的名称fileDemo.txt
    • 第2行代码使用openFileOutput()函数以私有模式建立文件
    • 第3行代码调用write()函数将数据写入文件
    • 第4行代码调用flush()函数将所有剩余的数据写入文件
    • 第6行代码调用close()函数关闭FileOutputStream

**openFileOutput()函数

  • 为了提高文件系统的性能,一般调用write()函数时,如果写入的数据量较小,系统会吧数据保存在数据缓冲区,等数据量累积到一定程度时在一次性的写入文件中
  • flush()函数,可以将缓冲区内所有的数据写入文件
  • 文件操作结束后,用close()关闭文件

openFileInput()函数

  • openFileInput()函数用于打开一个与应用程序联系的私有文件输入流
  • 当文件不存在时,抛出FileNotFoundException异常;
  • openFileInput()函数的语法格式如下:
    • public FileInputStream openFileInput(String name)
    • 第一个参数也是文件名称,同样不允许包含描述路径的斜杠

使用openFileInput()函数打开已有文件夹的示例代码如下

  1. String FILE_NAME = "fileDemo.txt";
  2. FileInputStream fis = openFileInput(FILE_NAME);
  3. byte[] readBytes = new byte[fis.available()];
  4. while(fis.read(readBytes)!=-1){ }

    上面两段代码在实际使用过程中会遇到错误提示,因为文件操作可能会遇到各种问题而最终导致操作失败,因为此代码应该使用try/catch捕获可能产生的异常

0 0