在android中所有的应用软件数据为该应用软件所私有,同样它也提供了一种标准方式供应用软件将私有数据开放给其他应用软件.android中有sharedPreferences,文件存储,SQLite数据库方式,内容提供器(content provider)和网络.

1)sharedPreferences存储
比如一些默认欢迎语,登录用户名,密码等以键值对的信息我们一般用它来存储;
step 1:首先我们可以通过

//获得一个sharedPreferences对象
    getSharedPreferences(SETTING_INFOS, 0);
    public static final String SETTING_INFOS = "SETTING_Infos";
    public static final String NAME = "NAME";
    public static final String PASSWORD = "PASSWORD";
    SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); 
    //获取一个SharedPreferences 对象
    String name = settings.getString(NAME, ""); 
    //取出保存的NAME
    String password = settings.getString(PASSWORD, ""); 
    //取出保存的PASSWORD




step 2:在程序运行onStop过程,也就是在程序退出时,首先使用getSharedPreferences得到settings,然后调用edit()方法使其处于可以编辑状态,并使用putString将两个EditText中的值保存起来,最后使用commit()方法提交即可保存;


@Override
    protected void onStop(){
        super.onStop();
        SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); 
        settings.edit().putString(NAME, field_name.getText().toString()).putString(PASSWORD, filed_pass.getText().toString()).commit();
     }
 //将用户名和密码保存进去



注意:SharedPreferences 是以XML 的格式以文件的方式自动保存的,在DDMS 中的File Explorer 中展开到/data/data/<package name>/shared_prefs 下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml 的文件;Preferences 只能在同一个包内使用,不能在不同的包之间使用;



2) 文件存储


前面介绍的Shared Preferences 存储方式非常方便,但是其只适合存储比较简单的数据,如果需要存储更多的数据,可行选择的方式有好几种,这里先给读者介绍文件存储的方法和传统的Java 中实现I/O 的程序类似,在Android 中,其提供了openFileInput 和openFileOuput方法读取设备上的文件,下面看个例子代码,具体如下所示:



String FILE_NAME = "tempfile.tmp";//确定要操作文件的文件名
 // Create a new output file stream that's private to this application
    FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE); //初始化
    // Create a new file input stream.
    FileInputStream fis = openFileInput(FILE_NAME); //创建写入流



上述代码中两个方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将 会抛出异常.需要提醒的是,如果调用FileOutputStream 时指定的文件不存在,Android 会自动创建它.另外,在默认情况下,写入的时候会覆盖原文件内容,如果想把新写入的内容附加到原文件内容后,则可以指定其mode为Context.MODE_APPEND.


注意:默认情况下,使用openFileOutput 方法创建的文件只能被其调用的应用使用,其他应用无法读取这个文件,如果需要在不同的应用中共享数据,可以使用Content Provider 实现,关于Content Provider 我们将在稍后的内容中介绍



资源文件放在哪里?


如果你的应用需要一些额外的资源文件,例如,一些用来测试你写的音乐播放器是否可以正常工作的 MP3 文件,可以将这些文件放在应用程序的/res/raw/下,如mydata.mp3.那么就可以在你的应用中使用getResources 获取资源后,以openRawResource 方法(不带后缀的资源文件名)打开这个文件,实现代码如下所示:


Resources myResources = getResources();
   InputStream myFile = myResources.openRawResource(R.raw.myfilename);