一、简单存储
1、简单存储
1.1、SharedPreferences
SharedPreferences是Android中较为简单的数据存储技术,常用来存储一些轻量级的数据,采用key-value(键值对)的方式保存数据。类似于Web程序的Cookie,通常用来保存一些配置文件数据、用户名及密码等。
SharedPreferences还可实现不同应用程序间的数据共享,支持三种访问模式:
(1)私有(MODE_PRIVATE),默认模式,该模式配置文件只允许本程序和享有本程序ID的程序访问。
(2)全局读(MODE_WORLD_READABLE),允许其他程序读文件。
(3)全局写(MODE_WORLD_WRITEABLE),允许其他程序写文件。
如果既要全局读又要全局写,可将访问模式设置为
MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE.
除了定义访问模式,还要定义SharedPreferences的名称,该名称是其在Android文件系统中保存的文件名称,一般声明为常量字符串,以方便在代码中多次使用。
getSharedPreferences()为Android系统函数,通过它可获得SharedPreferences实例。
获取SharedPreferences实例后,通过SharedPreferences.Editor类对其进行修改,完成数据设置。最后调用commit()函数保存数据。
SharedPreferences广泛支持各种基本数据类型,包括整型、布尔型、浮点型和长整形等,如:
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name", "Tom");
editor.putFloat("Height",1.78f);
editor.commit();
如果需要从已保存的SharedPreferences中读取数据,同样调用getSharedPreferences()函数,并在函数的第1个参数中指明需要访问的SharedPreferences名称,最后通过get<Type>()函数获取保存在SharedPreferences中的键值对。如:
Android系统为每个应用程序建立了与包同名的目录,用来保存应用程序产生的数据文件,包括普通文件、SharedPreferences文件和数据库文件等。
SharedPreferences保存后生成的是XML文件,保存在/data/data/<package name>/shared_prefs目录
1.2、使用SharedPreferences存储用户信息
案例:使用SharedPreferences保存用户登录名和密码
主要步骤:
创建新的工程SharedPreferences.
修改activity_main.xml,增加相关控件。
修改MainActivity.java,引用控件,添加按钮监听器,添加SharedPreferences
对象保存数据。
二、文件存储
使用SharedPreferences存取少量数据外,Android系统更多使用文件系统进行数据存储。
Android系统提供两类物理存储位置:内部存储(lnternal File Storage)和外部存储(External File Storage)。
1、内部存储(Internal Storage)
内部存储指的是Android系统允许应用程序创建仅能够自身访问的私有文件,即应用内部独有的存储,这部分存储的文件、数据,只能被应用自身访问到,其他应用都没有权限访问。
文件保存在设备的内部存储器上,位于系统的../data/data/<packagename>/files目录中。
一般情况下,/data开头的路径都是Internal Storage。而一般应用所能够访问到的即应用内部私有存储。
应用内部私有存储:
·/data/user/0/<包名
·/data/user/0/<包名>/files#存放文件数据
·/data/user/0/<包名>/databases#存放Sqlite的数据库文件
·/data/user/0/<包名>/shared_prefs #存放SharedPreference的数据
./data/user/0/<包名>/cache#存放缓存文件
Android使用Linux的文件系统,支持标准Java的IO类和方法,存取文件主要使用数据流的方式进行。
流是一个可被顺序访问的数据序列,是对计算机输入数据和输出数据的抽象,有输入流和输出流之分,输入流用来读取数据,输出流用来写入数据
常用的文件字节数据流
(1)FilelnputStream:文件字节输入流
(2)FileOutputStream:文件字节输出流
为了能使用字节流,可以使用openFileOutputStream()和openFilelnput()函数。
openFileOutputStream()的语法格式:
public FileOutputStream openFileOutput(String name, int mode)
第1个参数是文件名称,不可以包含描述路径的斜杠。第2个参数是文件操作模式。
使用openFileOutput()函数输出数据示例代码如下:
openFilelnput()函数语法格式为:
public FilelnputStream openFilelnput(String name)
参数为文件名,同样不允许包含描述路径的斜杠。使用openFilelnput()打开已有文件,并以二进制方式读取数据的示例代码如下:
FilelnputStream fis = openFilelnput("fileDemo.txt");
bytel l readBytes = new bytelfisavailable()];
while (fis.read(readBytes) !=-1){}
2、外部存储
外部存储指的是公共的存储,这部分存储理论上是全局可见的,所有的应用都
可以访问这部分数据,一般情况下,路径都是以/storage开头的,如
/storage/emulated/0就是属于外部存储。
Android外部存储设备一般指Micro SD卡,存储在SD卡上的文件称为外部文件
SD卡使用FAT文件系统,不支持访问模式和权限控制。Android模拟器支持SD卡的模拟,可以设置模拟器中SD卡的容量,模拟器启动后会自动加载SD卡。
正确加载SD卡后,SD卡中的目录和文件被映射到/mnt/sdcard目录下。
因为用户可以加载或者卸载SD卡,因此编程访问SD卡前要检测SD卡目录是否可用,如果不可用,说明设备中SD卡已经被卸载,如果可用,则直接使用标准的java.io.File类进行访问。
使用SD卡存取文件,需要在程序的AndroidManifest.xml中注册用户对SD卡的权限,分别是加载卸载文件系统权限和向外部存储器写入数据的权限,如:
三、数据库存储
1、SQLite数据库