数据持久化是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。保存中内存的数据处于瞬时状态,而保存在储存设备中的数据处于持久状态,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。
Android系统中主要提供了3种方式用于简单地实现数据持久化功能,即文件存储、SharedPreferences存储以及数据库存储。当然,除了这3种方式之外,还可以将数据保存在手机的SD卡中,不过使用文件、SharedPreferences或数据库来保存数据会相对简单一些,而且比保存在SD卡中更加安全。
一、文件存储
文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中,因而它比较适合用于存储一些简单的文本数据或二进制数据。
1.1 将数据存储到文件中
Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。这个方法接收两个参数,第一个是文件名,这里的文件名不能包含路径,因为所有的文件都是默认存储到/data/data/<packagename>/files/目录下的。第二个参数是文件的操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND。其中MODE_PRIVATE是默认的操作模式,表示当指定同样的文件名,所写入的内容会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件存在,就往文件里面追加内容,不存在就创建新文件。
以下是一段简单的代码示例,展示了如何将一段文本内容保存到文件中:
public void save(String data)
{
FileOutputStream out = null;
BufferedWriter writer = null;
try
{
out = openFileOutput("data", MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (writer != null)
{
writer.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
1.2 从文件中读取数据
类似于将数据存储到文件中,Context类中提供了openFileInput()方法,用于从文件中读取数据。这个方法只接收一个参数,即要读取的文件名,然后系统会自动到/data/data/<packagename>/files/目录下去加载这个文件,并返回一个FileInputStream对象,得到这个对象后在通过Java流的方式就可以将数据读取出来了。
以下是一段简单的代码示例,展示了如何从文件中读取数据:
public String load()
{
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try
{
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null)
{
content.append(line);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (reader != null)
{
reader.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
return content.toString();
}
二、 SharedPreferences存储
不同于文件的存储方式,SharedPreferences是使用键值对的方式开存储数据的。也就是说,当要保存一条数据时,需要给这条数据提供一个对应的键,这一样在读取数据时就可以通过这个键把相应的值取出来。而且SharedPreferences还支持多种不同的数据类型存储。
<