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();}

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android8.0中获取U盘的各种信息
  3. 图库/相册/播放器看不到迅雷下载的视频的解决办法
  4. Android的多媒体信息获取
  5. android OTA差分包的生成方法
  6. Android简单数据存储SharedPreferences
  7. Android(安卓)settings.db数据库中添加一条新的默认配置项
  8. Android操作联系人
  9. pc android sqlcipher 加密

随机推荐

  1. 技术造成歧视?微软等巨头不为警方提供面部
  2. 全新设计的Xcode 12
  3. VS Code的Golang插件现在由Go团队维护
  4. 从Java EE到Jakarta EE,最终过渡版本发布
  5. 马化腾每天刷题?代码你打算写到几岁?
  6. GNOME Mutter的代码清理工作将促进支持Vu
  7. 又说骚话,Linus再次拒绝Intel CPU漏洞补丁
  8. 不出意外的话,Go泛型终于要引入了
  9. .NET IDE Rider公布2020.2路线图
  10. Chrome团队:2020年了,浏览器兼容性还是一个