学习基于《第一行代码》第六章(郭霖)
文章目录
- 一、文件存储
- 将数据存储到文件
- 从文件中读取数据
- 二、SharedPreferences存储
- 将数据存储到SharedPreferences中
- 从SharedPreferences中读取数据
- 三、SQLite数据库存储
数据存储也叫做数据持
久化技术。主要提供了3种方式,即
文件存储、
SharedPreferences存储以及
数据库存储,当然还可以用sd卡存储,但是上三种会相对更简单一些,而且比起将数据存储在SD卡中会更加地安全。
一、文件存储
这里需要先复习一下JAVA 流的概念,这里推荐一篇文章:
比较适合用于存储一些简单的文本数据或二进制数据,但是若需要存储复杂数据,需要定义一套自己的格式规范,比如用**“##”**来代替分隔等等。并且读取、存储等操作都较麻烦。
将数据存储到文件
Context类中提供了一个openFileOutput()方法,这个方法接受两个参数,第一个参数是文件名,不可以包含路径,因为所有的文件都是默认存储到/data/data/<package name‘’>/filies/ 目录下的。第二个参数是文件的操作模式,MODE_PRIVATE和MODE_APPEND,代码如下
private void save(String inputText ) {
FileOutputStream fos = null;
BufferedWriter writer = null;
try {
fos = openFileOutput( "data", Context.MODE_PRIVATE);
writer = new BufferedWriter( new OutputStreamWriter(fos));
writer.write( inputText);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if( writer != null)
writer.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这里先获取到他的FileOUtputStream对象,因为他是字节流,往往是按照字符流存储的,所以要将其转为OutputStreamWriter对象,通过BufferedWriter对象存储。
从文件中读取数据
Context类中提供了一个openFileInput()方法,只接受一个参数,即要读取的文件名,目录与上文目录一致,返回一个FileInputStream对象。若文件不存在,则会跳到catch (FileNotFoundException e) 中
private void read( ) {
FileInputStream fis= null;
BufferedReader reader = null;
StringBuilder sb=new StringBuilder();
try {
fis= openFileInput( "data");
reader= new BufferedReader( new InputStreamWriter(fis));
String line="";
while((line=reader.readerLine())!=null){
sb.append(line)
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if( reader!= null)
reader.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
二、SharedPreferences存储
将数据存储到SharedPreferences中
要使用该方法来存储数据就要先获得一个SharedPreferences对象,有三种获取方法
Context上下文类中的getSharedPreferences
- Context类中的getSharedPreferences()方法
两个参数,第一个是指定文件的名称,不在就创建。目录也是在data/data/包名/shared_prefs目录下。两个参数,第一个是指定文件的名称,不在就创建。目录也是在data/data/包名/shared_prefs目录下。
第二个参数是操作模式,目前只有MODE_PRIVATE可选,即只允许当前的应用程序对其进行操作, - Activity类中的getPreferences()方法
Activity类中的getPreferences 只有一个参数,也是操作模式,文件的名称是默认的当前活动的类名Activity类中的getPreferences 只有一个参数。 - PreferenceManager管理类中的getDefaultSharedPreferences()
管理类中的一个静态方法,接收一个context参数,自动把当前的包名作为文件命名的前缀
得到一个对象之后,有三步来进行数据的存储
- 调用对象的edit方法获得一个SharedPreferences.Editor对象
- 向Editor对象添加数据,putBoolean()或者是putString(),等等putXXX()方法
- 调用commit方法将添加的数据提交,完成数据的存储操作
从SharedPreferences中读取数据
获取到SharedPreferences对象后,直接利用get***读取即可,不过需要在后面加第二个参数,即默认值
SharedPreferences pref=getSharedPreferences( "data", MODE_PRIVATE);
String name= pref.getString( "name", "");
三、SQLite数据库存储
增删改查等,等用到了再看即可
还可以通过LitePal来操作数据库,大大提供了方便