文件存储数据使用了Java中的IO操作来进行文件的保存和读取。针对文件的操作主要是以下三种:
1.创建或打开文件
2.读取文件
3.删除文件
创建文件:
1.通过Context.openFileOutput获取输出流
/*
* name 打开或创建文件的名称
* mode 打开或创建文件的模式
*/
FileOutputStream openFileOutput (String name, int mode)
Tip:创建的存储文件保存在/data/data/<package name>/files文件夹下
2.四种文件保存的模式
Context.MODE_PRIVATE = 0
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_APPEND = 32768
MODE_PRIVATE 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖原文件的内容。
MODE_WORLD_READABLE 表示当前文件可以被其他应用读取。
MODE_WORLD_WRITEABLE 表示当前文件可以被其他应用写入。
MODE_APPEND 检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Tip:在使用模式时,可以用"+"来选择多种模式,比如openFileOutput(FILENAME, Context.MODE_PRIVATE + MODE_WORLD_READABLE)
android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的
读取文件:
通过Context.openFileInput获取输入流。
/*
* name 打开或创建文件的名称
*/
FileInputStream openFileInput (String name)
删除文件:
/*
* name 删除文件的名称
* return 成功返回true,反之false
*/
boolean deleteFile (String name)
获取文件路径的方法:
getFilesDir()可以获取到"/data/data/<package name>/files"
getCacheDir()可以获取到"/data/data/<package name>/cache"
把文件存入SDCard
1.操作SDCard需要的权限
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。可以通过getExternalStorageState ()获得SDCard状态
返回的状态如下:
Environment.MEDIA_BAD_REMOVAL:bad_removal ——Media Remote before Unmount
Environment.MEDIA_CHECKING:checking——Media present(已插入) and being disk-check
Environment.MEDIA_MOUNTED:mounted——Media present and mounted and can be read/write
Environment.MEDIA_MOUNTED_READ_ONLY:mounted_ro——Media present and mounted and can be read
Environment.MEDIA_NOFS:nofs——Media present but filesytem not support
Environment.MEDIA_REMOVED:removed——Media not present
Environment.MEDIA_SHARED:shared——Media present and not mount. and share
Environment.MEDIA_UNMOUNTABLE:unmountable——Media present but can not mount
Environment.MEDIA_UNMOUNTED:unmounted——Media present but not mount
3.获取SDCard目录
/*
* return SDCard的目录File
*/
File getExternalStorageDirectory ()