前面介绍的Shared Preferences存储方式非常方便,但是其只适合存储比较简单的数据,如果需要存储更多的数据,可行选择的方式有好几种,这里先给读者介绍文件存储的方法。
和传统的Java中实现I/O的程序类似,在Android中,其提供了openFileInput 和 openFileOuput 方法读取设备上的文件,下面看个例子代码,具体如下所示:
- String?FILE_NAME?=?"tempfile.tmp";??//确定要操作文件的文件名 ?
- FileOutputStream?fos?=?openFileOutput(FILE_NAME,?Context.MODE_PRIVATE);?//初始化 ?
- FileInputStream?fis?=?openFileInput(FILE_NAME);?//创建写入流?
代码解释:
上述代码中两个方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将会抛出异常。需要提醒的是,如果调用FileOutputStream 时指定的文件不存在,Android 会自动创建它。另外,在默认情况下,写入的时候会覆盖原文件内容,如果想把新写入的内容附加到原文件内容后,则可以指定其模式为Context.MODE_APPEND。
注意?默认情况下,使用openFileOutput方法创建的文件只能被其调用的应用使用,其他应用无法读取这个文件,如果需要在不同的应用中共享数据,可以使用Content Provider实现,关于Content Provider我们将在稍后的内容中介绍。
小知识?资源文件放在哪里?
如果你的应用需要一些额外的资源文件,例如,一些用来测试你写的音乐播放器是否可以正常工作的MP3文件,可以将这些文件放在应用程序的/res/raw/下,如mydatafile.mp3。那么就可以在你的应用中使用getResources获取资源后,以openRawResource方法(不带后缀的资源文件名)打开这个文件,实现代码如下所示:
- Resources?myResources?=?getResources();? ?
- InputStream?myFile?=?myResources.openRawResource(R.raw.myfilename);??
除了前面介绍的读写文件外,Android还提供了诸如deleteFile、fileList 等方法来操作文件,不再赘述。
?