学习基于《第一行代码》第六章(郭霖)


文章目录

  • 一、文件存储
  • 将数据存储到文件
  • 从文件中读取数据
  • 二、SharedPreferences存储
  • 将数据存储到SharedPreferences中
  • 从SharedPreferences中读取数据
  • 三、SQLite数据库存储



数据存储也叫做数据持


久化技术。主要提供了3种方式,即

文件存储

SharedPreferences存储以及

数据库存储,当然还可以用sd卡存储,但是上三种会相对更简单一些,而且比起将数据存储在SD卡中会更加地安全。

一、文件存储

这里需要先复习一下JAVA 流的概念,这里推荐一篇文章:
比较适合用于存储一些简单的文本数据或二进制数据,但是若需要存储复杂数据,需要定义一套自己的格式规范,比如用**“##”**来代替分隔等等。并且读取、存储等操作都较麻烦。

将数据存储到文件

Context类中提供了一个openFileOutput()方法,这个方法接受两个参数,第一个参数是文件名,不可以包含路径,因为所有的文件都是默认存储到/data/data/<package name‘’>/filies/ 目录下的。第二个参数是文件的操作模式,MODE_PRIVATEMODE_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

  1. Context类中的getSharedPreferences()方法
    两个参数,第一个是指定文件的名称,不在就创建。目录也是在data/data/包名/shared_prefs目录下。两个参数,第一个是指定文件的名称,不在就创建。目录也是在data/data/包名/shared_prefs目录下。
    第二个参数是操作模式,目前只有MODE_PRIVATE可选,即只允许当前的应用程序对其进行操作,
  2. Activity类中的getPreferences()方法
    Activity类中的getPreferences 只有一个参数,也是操作模式,文件的名称是默认的当前活动的类名Activity类中的getPreferences 只有一个参数。
  3. PreferenceManager管理类中的getDefaultSharedPreferences()
    管理类中的一个静态方法,接收一个context参数,自动把当前的包名作为文件命名的前缀

得到一个对象之后,有三步来进行数据的存储

  1. 调用对象的edit方法获得一个SharedPreferences.Editor对象
  2. 向Editor对象添加数据,putBoolean()或者是putString(),等等putXXX()方法
  3. 调用commit方法将添加的数据提交,完成数据的存储操作

从SharedPreferences中读取数据

获取到SharedPreferences对象后,直接利用get***读取即可,不过需要在后面加第二个参数,即默认值

SharedPreferences  pref=getSharedPreferences( "data", MODE_PRIVATE);    
String name= pref.getString( "name", "");

三、SQLite数据库存储

增删改查等,等用到了再看即可
还可以通过LitePal来操作数据库,大大提供了方便