上一期我们学习了如何生成文件到特定的目录下,既然APP可以生成文件,那么像密码等涉及用户隐私的文件的安全系数就显得尤为重要。今天(貌似我这是一天两篇博文的节奏啊。。。)我们就来了解一下安卓系统下的文件访问权限。
它的权限设定,来自于他的根基——Linux。
验证文件访问权限
1. 为了生成拥有不同访问权限的文件,我们先在.xml文件里建立一个单选组RadioGroup,组里面放四个单选按钮RadioButton分别表示私有、可读、可写、公开四种将要选择生成的权限的文件。
2. 后台通过RadioGroup类里面的getCheckedRadioButtonId()方法来获取选中的是哪种权限文件,然后呢,进行判断,如果是私有的那么就调用Context类里面的openFileOutPut()方法来赋值给文件输出流变量,其中需要一个文件名参数,还需要一个文件访问权限参数:Context.MODE_PRIVATE(私有)、Context.MODE_WORLD_READABLE(可读)、Context.MODE_WORLD_WRITEABLE(可写)、Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE(公开)。部分代码如下:
FileOutputStream fos = null;
switch (mode) {
case 1:
fos = context.openFileOutput("private.txt", Context.MODE_PRIVATE);
break;
这里的1是当选择私有时传递参数1,后面依次是2/3/4。同时,该目录下还残留着上期留下的生成的默认的文件info.txt。
然后写一个调试程序,就是各种按钮对各种文件进行读和写两种操作。
最后运行调试发现:
程序本身
可以读写默认文件/私有文件
可以读不可以写可读文件
可以写不可以读可写文件
其他程序访问该程序
不可以读写默认文件/私有文件
可以读不可以写可读文件
可以写不可以读可写文件
好,这就是安卓下的文件访问权限。其实看字面意思也能猜个大概差不多。cmd adb shell命令
在cmd里输入adb shell(前提是连接有安卓虚拟机)
然后输入cd data/data
然后输入ls -l,此时就可以看到data/data目录下所有文件和文件夹的访问权限了。
然后再输入 cd 包名
再输入 cd files 这时候就可以看到我们创建的那几个文件了。
在这些用-/r/w/x/d组成的字符串(一共十个字符)里,第一个用来表示当前是文件(-)还是文件夹(d),后面9个字符分成了三组:第2-4字符表示给程序本身的读(r)写(w)执行(x)权限;第5-7字符表示给用户组的读写执行权限;第8-10字符表示给其他应用程序的权限。如果没有权限就是一个“-”,如果有就显示相应字母。
对于用户组这个概念,我理解的不是很清楚。问度娘,也没找到像样的答案。。。
然后呢,我们还可以通过cmd命令修改文件权限:
在上面的基础上继续输入 chmod 666 info.txt,此时再次输入ls -l我们会发现info.txt文件对所有人都可读写了。chmod是命令,info.txt是指定文件,那想必这个666就是要设定的权限了,那他是怎么来的呢?二进制转换十进制来的。在那10个字符里,如果是“-”就代表0,如果是字符就代表1,要想对所有人开放读写权限该怎么写二进制?必须是0 110 110 110啊,转换十进制不就是666了嘛。。。说实话对二进制这东西我有一种莫名的畏惧感,不会,以后得学学练练。。。
好吧,我又现查现学了一遍十进制二进制相互转换方法!
十进制转二进制:
数字除以2取余知道商为0,把余数组合起来颠倒过来就是转换成的二进制。(如:转化6,6/2=3……0;3/2=1……1;1/2=0……1,最后一颠倒余数,不就是110嘛)
二进制转十进制:
从最高位开始,1乘以2的最高位数减一次幂加上1乘以2的次高位数减一次幂加上……直到最后(如:110=1*2^(3-1)+1*2^(2-1)+0*2^(1-1)=6)
今天还学了学怎么配置android的环境变量,跟java操作步骤一样,都是先定义一个环境变量,然后添加到path里面去。
今天学到的还挺杂碎的,不过,知识就是积累的过程,无论学到的多么零碎,最终整合起来的时候我相信会很唬人的!