利用 Shar e dPreferences 来保存数据固然有其简单轻便的优势,但是当数据较大时使用 Shar e dPreferences 就 不 合适了,此时一般选择使用文件存储。 在应用私有文件夹中读写数据 在介绍如何在 Android 平合下进行文件存储之前有必要了解 Android 平台下的数据存储规则。在其他的操作系统如 Windows 平台下,应用程序可以自由地或者在特定的访问权限基础上访问或修改其他应用程序名下的文件等资源,而 在 Android 平台下,一个应用程序中所有的数据都是私有的。 当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于 Android 系统的 "data\data\< 包名 files\" 目录下,其他的应用程序都无法在这个文件夹中写入数据。除了存放私有的数据文件夹外,应用程序也具有 SDCard 卡的写入权限。 使用文件 I/O 方法可以直接往手机中存储数据,默认情况下这些文件不可以被其他应用程序访问。 Android 平台支持 Java 平台下的文件 I/O 操作,主要使用 FilelnputStream 和 FileOutputStream 这两个类来实现文件的存储与读取。获取这两个类对象的方式有两种。 第一种方式就是像 Java 平台下的实现方式一样通过构造器直接创建,如果需要向打开的文件末尾写入数据,可以通过使用构造器 FileOutputStream ( File file , boolean append )将 append 设置为 true 来实现。 第二种获取 FileInputStream 和 FileOutputStream 对象的方式是调用 Context . openFilelnput ( String filename )和 Context.openFileOutput ( String name , int mode )方法来创建。 在实际的 Android 开发实践中,使用第二种方式的并不多,在以往的 Android 开发类书籍里也很少有人提及这种方式。这是因为在前几年的环境下 Android 手机的机身内存还是较小的,需要借助于 SDCard ,多数的文件读写操作都是针对 SDCard 的,而它只能读写位于 "\data\data\< 包名 \files\" 下的文件,所以这种文件操作方式肯定是不合适的。但是,发展到今天, Android 手机的机身内存已足够大,不需要外加 SDCard ,甚至很多手机都已经不支持 SDCard 了。智能手机的发展使得这种操作文件读写的方式变得实用了。 相信读者在 Java SE 的学习中已经熟悉了第一种方式,所以这里主要以第二种方式来进行实例讲解。其中, Context 对象提供的几个主要用于对文件操作的方法方法名 openFilelnput(String filename) 打开应用程序私有目录下的指定私有文件以读入数据,返回一个 FilelputStream 对象 openFileOutput(String name,it mode) 打开应用程序私有目录下的指定私有文件以写入数据,返回一个 FileOutputStream 对象,如果文件不存在就创建这个文件 搜索应用程序私有文件夹下的私有文件,返回所有文件名的 St ri ng 数组 deleteFile(S t r i ng fileName) 删除指定文件名的文件,成功返回 true ,失败返回 false 在上述方法中, openFi le Ou t pu t ( St r in g n ame , i n t mode )的第二个参数指的是读取权限,这里的权限参数和 SharedPreferences 的参数一样,有如下 4 种 ∶ Conext . MODE _ PRVATE∶ 指定 ShardPrefreces 数据只能被本应用程序读、写。 Comex . MODE _ APPEND∶ 检查文件是否存在,存在就向文件中追加内容,否则创建新文件 Conext . MODE _ WORLD _ READABLE∶ 指定 SharedPrefernces 数据能被其他应用程序读,但不能写。 Context . MODE _ WORLD _ WRITEABLE∶ 指定 SharedPreferences 数据能被其他应用程序读、写 下面用实例来说明 Android 平台下的文件 IO 操作方式,主要实现的功能很简单,就是在应用程序私有的数据文件夹下创建一个文件并读取其中的数据显示到屏幕的 TextView 中。在实例中,包括一个 Act i viy 类和对应的布局文件,以及一个文件读写类。在 Activity 中操作该文件读写类,先将文本写入文件,再从文件中读出来并展示到 TextView 中。 布局文件代码如下: