安卓开发-文件读写权限
安卓规定app创建的私有文件只有该app可以读写;想要使其他app也可以读写的文件就需要创建公有文件,请看下面两个例子:
!注:Context.MODE_WORLD_WRITEABLE和Context.MODE_WORLD_READABLE这种写法已经被遗弃了,不推荐使用此写法,后面对此有专门的篇章讲解
app1:创建一个私有文件private.txt和一个公有文件public.txt
public void saveprivate(View view){//写入私有文件private.txt
try {
File file=new File(this.getFilesDir(),"private.txt");//创建文件保存路径
FileOutputStream fos= new FileOutputStream(file);//创建输出流
fos.write("这是写入的私有数据".getBytes());//输出流写入新的数据
fos.close();//关闭输出流
Toast.makeText(this,"写入成功",Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this,"写入失败",Toast.LENGTH_SHORT).show();
}
}
public void savepublic(View view){//写入公有文件public
try {
FileOutputStream fos=openFileOutput("public.txt", Context.MODE_WORLD_WRITEABLE+Context.MODE_WORLD_READABLE);//创建可读可写的文件
fos.write("这是写入的公有数据".getBytes());//输出流写入新的数据
fos.close();//关闭输出流
Toast.makeText(this,"写入成功",Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this,"写入失败",Toast.LENGTH_SHORT).show();
}
}
app2:分别读取app1的私有文件和公有文件
public void readpublic(View view){//读取公有文件public
try {
File file=new File("/data/data/com.example.administrator.filerandw/files/public.txt");//此文件夹为app1之前创建的私有文件
FileInputStream fis=new FileInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
String s=br.readLine();
Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this,"读取失败",Toast.LENGTH_SHORT).show();
}
}
public void readprivate(View view){//读取私有文件public
try {
File file=new File("/data/data/com.example.administrator.filerandw/files/private.txt");
FileInputStream fis=new FileInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
String s=br.readLine();
Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this,"读取失败",Toast.LENGTH_SHORT).show();
}
}
关于文件权限问题
在DDMS中查看文件或者在adb shell中使用ll查看文件时,会出现下图的现象,在permissions这里一列会有类似-rw-rw-r的写法:
例如:drwxr-x–x其中d表示这是一个文件夹(directory),w表示写(write),r表示读(read),x表示执行(execute),格式的权限分给了三组不同的用户群,分别是所有者,组,其他用户,所有者一般权限最高,具有wrx三个权限,到其他用户权限依次减小。
在adb shell中使用chmod 777 private.txt命令修改private的权限,chmod为change modify的简写,777为rwx的十六进制的写法:
0表示没有此权限,1表示有此权限
例如-rw-rw-rw-使用二进制写法为110 110 110,第一个“-”不参与,因为第一“-”表示是否是文件夹的意思110 110 110转化成十六进制为666,意思是其他用户以上级别的用户群都具有可读可写的权限,如果要更改一个文件的权限为可读可写,使用命令chmod 666 <文件名>即可