Context类中提供了一个openFileOutput()的方法,可以用于数据存储到指定的文件中。 out = openFileOutput("data",Context.MODE_PRIVATE); 第一个参数是文件名,第二个参数是文件的操作模式。常用的操作模式有两种,MODE_PRIVATE表示使用相同文件名时,所写的内容会覆盖原文件的内容,MODE_APPEND表示如果该文件已存在就往文件中追加新内容,不存在则创建新文件。openFileOutput返回的是一个FileOutputStream对象,得到对象后直接使用JAVA流的方式写入文件即可。
所有文件都是默认存储到data/data/<packagename>(包路径)/files/路径下。
public void save(String inputText) { FileOutputStream out = null; //声明一个输出流对象 BufferedWriter writer = null; //声明一个缓冲区,不用将数据转换成数组,可以直接往程序外部写字符串 try { out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out));//通过缓冲区向外输出数据 writer.write(inputText); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); //注意要关闭缓冲区 } } catch (IOException e) { e.printStackTrace(); } } }Context类中的openFIleInput()方法只接受一个参数,即要读取的文件名。 in = openFileInput("data");系统会自动到/data/data/< package name>/files/下加载这个文件,返回一个FileInputStream对象。
public String load() { FileInputStream in = null; //声明一个输入流对象 BufferedReader reader = null; //缓冲区 StringBuilder content = new StringBuilder(); try { in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { content.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString(); }这里和存储数据的结构类似,但是多了一个StringBuilder对象,StringBuilder和String很类似,大家可以简单的理解为StringBuilder的运行速度比String要快,他的append方法就是往字符串后面继续加数据的意思。
SharedPerferences是使用键值对的方式来存储数据的,而且SharedPerferences还支持多种不同数据存储,所以在使用期间它比简单的文件存储更为方便。
在使用SharedPerferences来存储数据时,首先需要获得SharedPerferences对象,这里给大家介绍三种获得SharedPerferences的方法:
此方法接收两个参数,第一个参数用于接受SharedPreferences文件的名字,如果不存在则创建一个。第二个参数用于指定的操作模式,操作模式一般有两个,MODE_PRIVATE、MODE_PROCESS,前者为默认的操作模式,和直接传入0效果相同,表示只有当前应用可以访问这个文件。后者则表示会有多个进程对同一个SharedPrefrences进行访问。
此方法只接受一个模式参数,则文件名字默认为当前活动的类名。
这是一个静态方法,它接受一个context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPerferences文件。
得到了SharedPerferences对象之后,就可以开始向SharedPreferences文件中存储数据了。存储数据主要分三个步骤: 1.调用SharedPerferences对象的edit()方法获取一个SharedPerferences.Editor对象。 2.向SharedPerferences.Editor对象中添加数据,添加数据的方法主要有putBoolean(),putString()等,比较直观。 3.调用commit()方法将添加的数据提交,完成数据存储操作。
public void onClick(View v) { SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();//创建SharedPreferences+步骤1 editor.putString("name", "Tom"); //步骤2 editor.putInt("age", 28); editor.putBoolean("married", false); editor.commit(); //步骤3 } });SharedPerferences的读取非常简单,类似put方法,android给我们提供了一系列的get方法来读取SharedPerferences文件中的数据。
public void onClick(View v) { SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE); String name = pref.getString("name", ""); int age = pref.getInt("age", 0); boolean married = pref.getBoolean("married", false); } });为了让我们更加方便的管理数据库,android专门提供了一个SQLiteOpenHelper帮助类来帮我们创建和升级我们的数据库。 SQLiteOpenHelper是一个抽象类,同Activity一样,我们需要创建自己的帮助类去实现它,重写onCreate()与onUpgrade()方法。
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table Book (" //SQL 语句 + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " + "name text)"; private Context mContext; public MyDatabaseHelper(Context context, String name,CursorFactory factory, int version) { super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }关于SQL数据库存储内容非常多,这里也就不为大家进行太多的讲解,如果大家有需要了解的可以看我的收藏。