三、文件存储 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解析就像一个很懒的驴子,抽他一下走一步