Android 数据持久化

Android中,实现数据持久化主要有四种方式:SharedPreferences文件I/O、SQLite数据库、ContentProvider组件。本文先介绍前面两种。

1.SharedPreferences是一种轻量级的数据存储机制,是以键值对(key-value)的方式来存储数据,一般用键值这种一一对应的关系来存放配置信息,效率高于数据库。但它仅可以存储booleans, floats, ints, longs, and strings这些基本的数据类型。一般会将复杂类型的数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存,一般默认存储在应用程序的私有Preferences目录(/data/data/<包名>/shared_prefs/)

使用步骤如下:

01)导入包:

import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

02)实例化

SharedPreferences mSharedPreferences = this.getSharedPreferences("mFiles", MODE_PRIVATE);

 03)获得编辑器

SharedPreferences.Editor mEditor = mSharedPreferences.edit();

04) 修改数据并提交

mEditor.putString("mValue", "mmmm");
mEditor.commit();

05) 取出数据

String name = mSharedPreferences.getString("mValue", "zero");

以上就是Android中SharedPreferences的使用方法,其中创建的Preferences文件存放位置可以在Eclipse中查看:

 DDMS->File Explorer /<package name>/shared_prefs/mFiles.xml

2.文件存储
01)操作
 保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式。
读取文件内容:通过Context.openFileInput获取输入流,参数为文件名。
删除文件:Context.deleteFile删除指定的文件,参数为将要删除的文件的名称。
获取文件名列表:通过Context.fileList获取files目录下的所有文件名数组。
*获取文件路径的方法:
绝对路径:/data/data//files/filename
Context:Context.getFilesDir()可以获取到”/data/data//files”

02)四种文件保存的模式
Context.MODE_PRIVATE 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖原文件的内容。
Context.MODE_APPEND 检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE 表示当前文件可以被其他应用读取。
MODE_WORLD_WRITEABLE 表示当前文件可以被其他应用写入。
在使用模式时,可以用”+”来选择多种模式,比如openFileOutput(FILENAME, Context.MODE_PRIVATE + MODE_WORLD_READABLE);

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.content.Context;

private static final String FILE_NAME = "cal.gg"; 
/*保存内容到相应的文件中*/
public void onSaveData(String exp, String result){

    FileOutputStream out = null;
    BufferedWriter writer = null;
    StringBuilder text = new StringBuilder();
    text.append(exp).append("=").append(result).append("\r\n");
    try {
        out = openFileOutput(FILE_NAME, Context.MODE_APPEND);
        writer = new BufferedWriter(new OutputStreamWriter(out));
        writer.write(text.toString());
        writer.write("\r\n");
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            if (writer != null){
                writer.close();
            } 
        } catch (IOException ep){
            ep.printStackTrace();
        }
    }

}

/*加载已保存的数据*/
public String loadSaveData(){
    FileInputStream in = null;
    BufferedReader reader  = null;
    StringBuilder content = new StringBuilder();
    try {
        in = openFileInput(FILE_NAME);
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        while ((line = reader.readLine())!= null){
            content.append(line); 
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            if (reader != null){
                reader.close();
            } 
        } catch (IOException ep){
            ep.printStackTrace();
        }
    }
    return content.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值