三、文件存储
1.操作手机内部存储中的文件
可以使用流的方式直接操作文件
路径最好不要写死,一旦写死当修改应用包名时程序中的路径也跟着要修改
可以通过如下的方法动态获取路径:
getFilesDir
会获取/data/data/[包名]/files 目录,这个目录下存储的内容会有保障一直存在
getCacheDir
会获取/data/data/[包名]/cache 目录,这个是缓存目录,目录下存储的内容随时可能被回收,一般放置可有可无的缓存文件.虽然系统会在空间不足时帮我们回收次文件夹下的内容,但是android推荐如果程序员明确的直到这个文件夹下的文件已经不需要时,应该立即手动删除.
2.操作外部存储空间(SDCARD)中的文件:
(1)写入sdcard需要声明权限
(2)默认情况下读取sd卡是不需要声明权限,但是在高版本的android中在开发者选项中提供了开去读sd卡保护的选项,虽然这个选项在很多手机中是不起作用的但是部分手机是可以用的,为了防止无法读取sd卡的问题,通常我们在加上sd卡的写权限时会一起加上读取sd卡权限
(3)/mnt/sdcard 不同的厂商生产的手机sdcard的目录可能不同,不能写死,需要通过 Environment.getExternalStorageDirectory()获取
(4)由于sd卡是可以卸载的在操作之前最好检查sd卡是否插入并处于可操作的状态
String stat = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(stat)){}else{}
3.android提供的读写文件的快捷方法
FileInputStream in = Context.openFileInput(name); -- 直接操作/data/data/[包名]/files目录下的文件流
FileOutputStream out = Context.openFileOutput(name, mode); -- 直接操作/data/data/[包名]/files目录下的文件流
MODE_PRIVATE -- 只有当前应用能够访问,路人无法访问,并且如果之前有这个文件,再往里写入数据,数据会覆盖
MODE_APPEND -- 只有当前应用能够访问,路人无法访问,并且如果之前有这个文件,再往里写入数据,数据会追加
MODE_WORLD_READABLE -- 当前应用能够访问这个文件,另外其他应用可以读这个文件
MODE_WORLD_WRITEABLE -- 当前应用能够访问这个文件,另外其他应用可以写这个文件
4.android内部的文件访问权限:
android底层是linux,沿用了linux的文件权限系统
通过十个二进制位表示文件的权限
1位表示类型 -- 文件 文件夹 超链接
2--4 表示当前用户对当前文件的访问权限 可读 可写 可执行
5--7 表示当前用户组中的用户对当前文件的访问权限 可读 可写 可执行
8--10 表示其他用户(路人)对当前文件的访问权限 可读 可写 可执行
android中每一个应用程序都是一个用户,独占一个用户组
四、SharedPreferences –
非常便于保存键值对信息,通常用来作为程序的配置信息存储的方式,本质是一个xml文件,保存在/data/data/[包名]/shared_prefs文件夹中
案例:控制声音大小
创建Sharedprefrence sp = getSharedPreferences("voiceConfig", MODE_PRIVATE);
写入数据:
Editor editor = sp.edit();
editor.putXXX(name, value);//编辑器以键值对形式存储数据
editor.commit();
读取数据:
sp.getInt(name, defaultValue);//用键拿值,defaultValue是默认的值,当文件中没有存储的时候给键赋值
五、Xml的操作
PULL解析,android自带pull解析api,不需要导入任何包就可以用,pull解析也可以用在普通的java项目中
1.写出xml
案例:备份用户短信
XmlSerializer serializer = Xml.newSerializer();
!!2.读取xml
案例:读取天气信息
XmlPullParser parser = Xml.newPullParser();
pull解析就像一个很懒的驴子,抽他一下走一步