Android 中数据存储(File,SharedPreference,SqliteDatabase)

对于数据存储,android提供了三种方式:

  • File

  • SharedPreferences

  • SQLite


File(文件存储)

文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中,因而它比较适合存储一些简单的文本数据或者二进制数据。对于复杂数据,不适合使用该存储方式。接下来介绍一下File存储的使用方式。

save

通过openFileOutput()来获取一个输出流FileOutputStream(),第一个参数是”存储的文件名”,第二个参数是存储模式,有两种模式,MODE_PRIVATE和MODE_APPEND这两种模式。MODE_PRIVATE是当指定为同样的文件名时,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件已存在,就往文件中追加内容。不存在就创建。

    public void save() {
        String data = "Data to save";
        FileOutputStream out = null;
        BufferedWriter writer = null;

        try {
            out = openFileOutput("data", Context.MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(out));
            writer.write(data);
            Log.e(TAG, "文件存储已执行");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (writer != null) {
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
此时,在手机中的data/data/项目包名/下就会出现一个files文件夹,这里面就有我们刚才创建的文件。
当然也可以使用android studio中的工具---Android---Android Device Monitor等待一会打开后,又上角DDMS--File Explore,找到data/data/找到项目文件夹/打开就可以看到files这个文件夹了.
为什么这一块要这么具体的讲呢,是因为我们今天说的三种存储方式的存储位置都在data/data/项目包名/下。

可以点击如图中的右上角标示,导出这个文件,打开查看其中的数据。就是我们刚才写入的数据。

read
  /**
     * 读取存储的数据
     */
    public void readFile() {
        FileInputStream inputStream = null;
        BufferedInputStream bis = null;

        try {
            inputStream = openFileInput("data");
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line = "";
            while ((line = reader.readLine()) != null) {
                Log.e(TAG, "" + line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

以上就是文件存储的知识,其实所用到的核心就是Context类中提供的openFileInput和openFileOutput方法,之后就是利用java的各种流来进行读写操作就可以了!

SharedPreferences

不同于文件存储,SharedPreferences 是通过键值对来存储数据的,在使用前,我们需要获取SharedPreferences对象,获取的方式有以下几种方式:

        //方法一 自定义命名
        SharedPreferences preferences = 
               getSharedPreferences("shared",MODE_PRIVATE);


        //方法二  自动将当前活动的类名作为SharedPreferences
        SharedPreferences preferences2 = getPreferences(MODE_PRIVATE);


        //方法三  自动使用当前应用的包名作为前缀来命名的
        SharedPreferences preferences3 =        
        PreferenceManager.getDefaultSharedPreferences(this);

上面的三种方式中:

第一种是通过 Context来调用,参数中第一是文件名,如果不存在,就会新创建,第二个是模式,有两种MODE,MODE_PRIVATE和MODE_MULTI_PROCESS,第一种模式是只有当前的应用才可以对文件进行读写,第二个模式是应用于会有多个进程中对同一个Shared文件进行操作。如:shared.xml

第二种是通过当前的Activity来调用的,不过该方法只接收一个参数,因为使用这个方法时,会自动将当前活动的类名作为Shared文件名。如:sharedsave.SharedActivity.xml

第三种,这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。如:com.aofei.no1codedatasave_preferences.xml

接下来就是SharedPreferences的使用了

save

1.调用SharedPreferences对象的edit() 方法获取一个SharedPreferences.Editor对象

2.向Editor对象中添加数据,比如添加一个布尔类型数据就可以使用putBoolean方法,

3.调用commit()方法将添加的数据提交。从而完成数据的存储。

  SharedPreferences.Editor editor = preferences.edit();
  editor.putString("name", "xiaokai");
  editor.putInt("age", 1);
  editor.commit();

执行完存储后,可以打开DDMS视图,并点击File ExPlorer切换卡,然后进入到data/data/包名/下可以看到一个shared_prefs文件夹,这下面就存放着我们刚才创建的文件。将这个文件使用相同的方法导出到桌面,打开就可以看到数据格式,我们可以发现数据是以xml的形式来存储的。

read

        //方法一
        SharedPreferences preferences = getSharedPreferences("shared", MODE_PRIVATE);
        //方法二
        SharedPreferences preferences2 = getPreferences(MODE_PRIVATE);
        //方法三
        SharedPreferences preferences3 =  
                 PreferenceManager.getDefaultSharedPreferences(this);
        String n1 = preferences.getString("name", "");
        String n2 = preferences2.getString("name", "");
        String n3 = preferences3.getString("name", "");
        Log.e(TAG, n1 + "," + n2 + "," + n3);

通常我们可以使用该存储方式,存储用户名和密码,当然还需要在存储前进行加密。好了,关于SharedPreferences的内容就到这里了。

SQLite

关于数据库的使用,Android系统内置了轻量级的数据库SQLite,因为数据库的使用要比前面两种存储方式要复杂些,这篇文章,就不再添加该部分内容,将SQLite的使用单独写一篇文章来总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值