Android数据存储
· 内部存储空间十分有限,因而显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。
· 所以对于内部存储空间,我们要尽量避免使用。Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作。
一、SharedPreferences:
(一)、概念:
SharedPreferences是Android系统提供的一个通用的数据持久化框架,用于存储和读取key-value类型的原始基本数据类型对,目前支持string、int、long、float、boolean等基本类型的存储,对于自定义的对象数据类型,无法使用SharedPreferences来存储。
SharedPreferences主要用于存储系统的配置信息。例如上次登录的用户名,上次最后设置的配置信息(如:是否打开音效、是否使用振动,小游戏的玩家积分等)。当再次启动程序后依然保持原有设置。SharedPreferences用键值对方式存储,方便写入和读取。
(二)、使用SharedPreferences的步骤:
1、获取SharedPreferences对象;
SharedPreferences本身是一个接口,无法直接创建实例,通过Context的getSharedPreferences(String name, int mode)方法来获取实例。
该方法的第二个参数有以下三个值:【文件读写的操作模式】
· Context.MODE_PRIVATE: 指定该SharedPreferences的数据只能被本应用程序读、写;
· Context.MODE_APPEND:新内容追加到原内容后;
· Context.MODE_WORLD_READABLE: 指定 SharedPreferences数据能被其他应用程序读,但是不支持写;
· Context.MODE_WORLD_WRITEABLE: 指定 SharedPreferences数据能被其他应用程序读、写。会覆盖原数据。
· 可以使用 + 连接这些权限。
2、调用edit()方法获取SharedPreferences.Editor;
3、通过SharedPreferences.Editor接口提供的put()方法对SharedPreferences进行更新;
4、调用SharedPreferences.Editor的commit()方法,将更新提交到SharedPreferences中。
(三)、核心代码:
button_main_savedata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs = getSharedPreferences("myaccount", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("age", 38);
editor.putString("username", "wangxiangjun");
editor.putString("pwd", "123456");
editor.putString("username", "xiangjun");
editor.putString("age", "I'm 40 years old!");
editor.commit();
}
});
button_main_readdata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs = getSharedPreferences("myaccount", Context.MODE_PRIVATE);
String name = prefs.getString("username", "wxj");
String pwd = prefs.getString("pwd", "000");
int age = prefs.getInt("age", 20);
System.out.println("====>" + name + ":" + pwd + ":" + age);
}
});
(四)、保存之后的SharedPreferences数据文件:
SharedPreferences数据总是以xml格式保存在:/data/data/包名/shared_prefs目录下;
例如:
二、文件存储
内部存储 一般都是私有模式 ,程序卸载就没有了,别的程序不能访问这个文件夹
1.文件保存在哪里
事实上,文件保存的路径与SharedPreferences的保存路径差不多,位于/data/data/
2.文件操作的一些方法
知道文件保存的位置和形式后,接下来需要知道操作文件的一些重要的方法,如表所示:
操作文件的重要方法 |
含义 |
openFileInput() |
打开应用程序文件以便读取 |
openFileOutput() |
创建应用程序文件以便写入 |
deleteFile() |
通过名称删除文件 |
fileList() |
获得所有位于/data/data/ |
getFileDir() |
获得/data/data/ |
getCacheDir() |
获得/data/data/ |
getDir() |
根据名称创建或获取一个子目录 |
在程序默认位置创建和写入文件
我们知道在Java中通过使用流来读写文件,要创建一个文件首先要建立一个输出流。在Android中同样如此,我们依靠openFileOutput()来获得一个输出流。它将在上一节中展示的位置创建一个文件,使用一个流要3个步骤:
1.获得一个输出流对象
获得一个输出流对象以进行文件操作,使用openFileOutput()方法可以很方便的获得,如下所示:openFileOutput(“myFile.txt”,Context.MODE_PRIVATE);
2.向流中写入数据
获得了输出流之后我们需要向流中添加我们需要添加的信息了,同样非常方便,使用write()方法就可以了:
write(data.getBytes());
3.关闭流
当数据写入完毕后,使用close()方法可以关闭输出流,方法如下所示:
fos.close();
在默认位置读取文件
与上面类似,Android提供了读取文件的简便方法,同样需要3个步骤:
1. 创建输入流
首先,得到了一个输入字节流,参数是文件名。
fis = openFileInput(“myFile.txt”);
接着,将其转换为字符流,这样可以一个字符一个字符地读取以便显示中文。
isr = new InputStreamReader(fis);
br = new BufferedReader(isr);
最后,我们又将其包装为缓冲流,这样可以一段一段地读取,减少读写的次数,保护硬盘。
2. 读取数据
从流中获得数据同样非常方便,这里没有使用read()方法而使用了readLine()方法,原因下文也会给出,代码如下:
String s = null;
S = (br.readLine());
3. 关闭输入流
这里记得每个流都要关闭哦:
fis.close();
isr.close();
br.close();