[android] 07_Android中文件访问权限

Android 4.0

Android中文件访问权限  


Android中文件访问权限

为什么需要文件访问权限控制?

如果对于一个银行应用,其他的应用可以访问银行应用的数据那将是危险的,所以采用文件权限控制,每一个应用程序都分配一个单独用户的

私有文件,其他程序默认是不能访问的。

运行结果:

/**
 * 文件权限保存操作
 * 
 */
public class UserInfoService {
    /**
     * 1、以MODE_PRIVATE模式保存用户名和密码到文件到用户程序数据目录中
     * @param context 上下文
     * @param username 用户名
     * @param password 密码
     * @return 保存成功返回true,反之反复false。
     */
    public static boolean saveUserInfoPrivate(Context context,String username,String password){
        try {
            FileOutputStream fos = context.openFileOutput("private.txt", Context.MODE_PRIVATE);
            //hacket~~123456
            fos.write((username+"~~"+password).getBytes());
            fos.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 2、以MODE_APPEND模式保存用户名和密码到文件到用户程序数据目录中
     * @param context 上下文
     * @param username 用户名
     * @param password 密码
     * @return 保存成功返回true,反之反复false。
     */
    public static boolean saveUserInfoAppend(Context context,String username,String password){
        try {
            FileOutputStream fos = context.openFileOutput("append.txt",
                    Context.MODE_APPEND);
            //hacket~~123456
            fos.write((username+"~~"+password).getBytes());
            
            fos.close();
            return true;
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 3、以MODE_WORLD_READABLE模式保存用户名和密码到文件到用户程序数据目录中
     * @param context 上下文
     * @param username 用户名
     * @param password 密码
     * @return 保存成功返回true,反之反复false。
     */
    public static boolean saveUserInfoReadable(Context context,String username,String password){
        try {
            FileOutputStream fos = context.openFileOutput("readable.txt", Context.MODE_WORLD_READABLE);
            //hacket~~123456
            fos.write((username+"~~"+password).getBytes());
            //Using MODE_WORLD_READABLE when creating files can be risky, review carefully 以只读模式保存用户数据是冒险的,仔细地重新检查
            fos.close();
            return true;
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 4、以MODE_WORLD_WRITEABLE模式保存用户名和密码到文件到用户程序数据目录中
     * @param context 上下文
     * @param username 用户名
     * @param password 密码
     * @return 保存成功返回true,反之反复false。
     */
    public static boolean saveUserInfoWriteable(Context context,String username,String password){
        try {
            FileOutputStream fos = context.openFileOutput("writeable.txt", Context.MODE_WORLD_WRITEABLE);
            //hacket~~123456
            fos.write((username+"~~"+password).getBytes());
            
            fos.close();
            return true;
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
}
每一个安装的应用程序 默认情况下 操作系统都会给这个应用程序分配一个单独的用户私有的文件,别的应用程序是不可以读取/修改的.

问题:如果查找id的时候写成下面这样的。那死活也找不到组件,报异常。

// this.rg_modeGroup.findViewById(R.id.rg_saveFileMode);//问题

rg_modeGroup = (RadioGroup) this.findViewById(R.id.rg_saveFileMode);

E/AndroidRuntime(1382): java.lang.RuntimeException: Unable to start activity ComponentInfo