~案例: 记住 用户名密码 应用
1.将数据保存在手机的内部存储空间中
{利用context.getFilesDir和context.getCacheDir存储数据到手机里面}
我们可以直接以流的形式去读写文件,但是这样不好,因为将应用路径写死在了程序中,
一旦修改应用包名,所有路径都需要重新修改.
context.getFilesDir()//返回[当前应用]/files文件夹的File对象
//【存入files文件夹的内容,将会永久存在除非手动删除】
context.getCacheDir()//返回[当前应用]/cache文件夹的File对象
//【缓存文件夹 这个文件夹中的内容除了可以手动删除,
//android系统在某些情况下(硬盘空间不足) 会自动去清理,
//虽然android会帮我们清理cache但是android推荐,
//应该在缓存文件使用完尽快手动清理掉】
【说明:context当前应用的环境】
2.外部存储空间(SD卡)
默认情况下写sd卡需要权限,读sd卡不需要权限,但是在高版本的android中可以配置开启sd卡读权限控制
(模拟器不支持,也不是所有手机都支持),此时读sd卡也需要权限,所以我们通常在使用sd卡时读和写的权限都配置即可.
有的手机厂商的sd卡目录并不叫/mnt/sdcard,如果程序中写死,在这种手机上就找不到sd卡目录!
File file = Enviroment.getExternalStorageDirectory();//--sd卡根目录的File对象
//判断SD卡是否存在
Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
3.快捷方法
//--直接获取输入流 指向 [应用目录]/files/...指定名称的文件
FileInputStream in = context.openFileInput(name)
//--直接获取输出流 指向 [应用目录]/files/...指定名称的文件
FileOutputStream out = context.openFileOutput(name,mode)
~~mode的可选值:
MODE_PRIVATE 只有当前应用可写,如果之前文件已经存在,则在写的时候内容发生覆盖
MODE_APPEND 只有当前应用可写,如果之前文件已经存在,则追加内容
MODE_WORLD_READABLE 写出的文件全局可读(路人可以看)
MODE_WORLD_WRITEABLE 写出的文件全局可写(路人可以写)
~MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE 写出的文件即可读有可写
~~android中的文件的访问权限:
在linux中使用十位二进制表示文件的访问权限
第一位:表示文件的类型
d:文件夹
-:普通文件
前三位:表示【当前用户】对文件的访问权限 是否可读 是否可写 是否可执行
中间三位:表示【当前用户所在组中其他用户】对文件的访问权限 是否可读 是否可写 是否可执行
最后三位:表示【当前组以外的其他用户】对文件的访问权限 (~路人的访问权限)
是否可读 是否可写 是否可执行
android中每一个应用程序都独占一个用户,并且通常情况下这个用户独占一个用户组
1.将数据保存在手机的内部存储空间中
{利用context.getFilesDir和context.getCacheDir存储数据到手机里面}
我们可以直接以流的形式去读写文件,但是这样不好,因为将应用路径写死在了程序中,
一旦修改应用包名,所有路径都需要重新修改.
context.getFilesDir()//返回[当前应用]/files文件夹的File对象
//【存入files文件夹的内容,将会永久存在除非手动删除】
context.getCacheDir()//返回[当前应用]/cache文件夹的File对象
//【缓存文件夹 这个文件夹中的内容除了可以手动删除,
//android系统在某些情况下(硬盘空间不足) 会自动去清理,
//虽然android会帮我们清理cache但是android推荐,
//应该在缓存文件使用完尽快手动清理掉】
【说明:context当前应用的环境】
2.外部存储空间(SD卡)
默认情况下写sd卡需要权限,读sd卡不需要权限,但是在高版本的android中可以配置开启sd卡读权限控制
(模拟器不支持,也不是所有手机都支持),此时读sd卡也需要权限,所以我们通常在使用sd卡时读和写的权限都配置即可.
有的手机厂商的sd卡目录并不叫/mnt/sdcard,如果程序中写死,在这种手机上就找不到sd卡目录!
File file = Enviroment.getExternalStorageDirectory();//--sd卡根目录的File对象
//判断SD卡是否存在
Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
3.快捷方法
//--直接获取输入流 指向 [应用目录]/files/...指定名称的文件
FileInputStream in = context.openFileInput(name)
//--直接获取输出流 指向 [应用目录]/files/...指定名称的文件
FileOutputStream out = context.openFileOutput(name,mode)
~~mode的可选值:
MODE_PRIVATE 只有当前应用可写,如果之前文件已经存在,则在写的时候内容发生覆盖
MODE_APPEND 只有当前应用可写,如果之前文件已经存在,则追加内容
MODE_WORLD_READABLE 写出的文件全局可读(路人可以看)
MODE_WORLD_WRITEABLE 写出的文件全局可写(路人可以写)
~MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE 写出的文件即可读有可写
~~android中的文件的访问权限:
在linux中使用十位二进制表示文件的访问权限
第一位:表示文件的类型
d:文件夹
-:普通文件
前三位:表示【当前用户】对文件的访问权限 是否可读 是否可写 是否可执行
中间三位:表示【当前用户所在组中其他用户】对文件的访问权限 是否可读 是否可写 是否可执行
最后三位:表示【当前组以外的其他用户】对文件的访问权限 (~路人的访问权限)
是否可读 是否可写 是否可执行
android中每一个应用程序都独占一个用户,并且通常情况下这个用户独占一个用户组