利用 SharedPreferences 来保存数据固然有其简单轻便的优势,但是当数据较大时使用 SharedPreferences 就不合适了,此时一般选择使用文件存储。
在应用私有文件夹中读写数据
在介绍如何在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 对象,如果文件不存在就创建这个文件
搜索应用程序私有文件夹下的私有文件,返回所有文件名的 String 数组
deleteFile(String fileName)删除指定文件名的文件,成功返回true,失败返回 false
在上述方法中,openFileOutput(String name,in t mode)的第二个参数指的是读取权限,这里的权限参数和 SharedPreferences 的参数一样,有如下 4 种∶
Conext.MODE_PRVATE∶指定 ShardPrefreces 数据只能被本应用程序读、写。Comex.MODE_APPEND∶检查文件是否存在,存在就向文件中追加内容,否则创建新文件
Conext.MODE_WORLD_READABLE∶指定 SharedPrefernces 数据能被其他应用程序读,但不能写。
Context.MODE_WORLD_WRITEABLE∶指定 SharedPreferences数据能被其他应用程序读、写
下面用实例来说明Android平台下的文件IO 操作方式,主要实现的功能很简单,就是在应用程序私有的数据文件夹下创建一个文件并读取其中的数据显示到屏幕的TextView中。在实例中,包括一个Activiy类和对应的布局文件,以及一个文件读写类。在Activity 中操作该文件读写类,先将文本写入文件,再从文件中读出来并展示到TextView 中。
布局文件代码如下:
实例代码中的新方法和逻辑以及实现的功能在前文都已经叙述了。运行程序,效果如下:
android studio工具及手机模拟器以及更多工程源代码下载请前往微信公众号:大鸟科创空间,回复:android studio即可获取。
作者: 大鸟科创空间, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3949041.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
商业资讯 2021-8-2 11:41