首页

文件读写权限

搜索

概述
openFileOutput(String filename,int mode)方法的第二个参数mode用于设置文件的读写权限,
有以下四个常量值:
(1)MODE_PRIVATE设置文件属性为私有,即只能被当前项目读写。
(2)MODE_APPEDN:以添加方式打开文件,并向文件中添加数据。
(3)MODE_WORLD_READABLE该文件可被其它项目读取。
(4)MODE_WORLD_WRITEABLE该文件可被其它项目读写。
以下通过案例演示这些读写权限的使用。
示例-读写权限操作
创建项目exerl6_ 08,包名:com.mt.exerl6_08,项目入口:MainAct.java,运行效果如图一4所示:

图一4
(1) MODE_PRIVATE:文件只能被本项目读写。
(2)MODE_WORLD_WRITEABLE:文件允许被其它项目写,但不能读。
(3)MODE_WORLD_READABLE:文件允许被其它项目读,但不能写。
(4)MODE_APPEND:允许向已有数据的文件添加数据,但不能被其它项目读写。
(5)MODE_APPEND|MODE_WORLD_ READABLE|MODE_WORLD_WRITEABLE:允许向已有数据的
文件添加数据,并允许其它项目读写本项目的文件。
说明:以上用或运算操作符:|合并了三个权限操作。
关键代码-项目入口:MainAct.java
//本类演示通过选择,以不同的权限保存文件,在项目exerl6_ 09中对保存的文件进行读取的测试操作
public class MainAct extends Activity implements OnCIickListener{
EditText metSaveContent;//保存的内容
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//实例化各控件
metSaveContent=(EditText) findViewById(R.id.etSaveContent);
Button btnPrivate=(Button) findViewById(R.id.btnTypeAppend);
Button btnAppend=(Button) findViewById(R.id.btnTypePrivate);
Button btnReadable=(Button)findViewById(R.id.btnTypeReadable);
Button btnWriteable=(Button)findViewById(R.id.btnTypeWriteable);
Button btnAll=(Button)findViewById(R.id.btnTypeWriteableReadableAppend);
//设置以下按钮的单击事件
btnAppend.setOnCIickListener(this);
btnPrivate.setOnCIickListener(this);
btnReadable.setOnCIickListener(this);
btnWriteable.setOnCIickListener(this);
btnALL.setOnCl ickListener(this);
}

//重写单击事件响应方法-onCIick()
@Override
public void onClick(View v){
int type_ mode=MODE_APPEND;
switch (v.getId()){
case R.id.btnTypeAppend://保存文件按钮
type_ mode=MODE_APPEND;
break;
case R.id.btnTypePrivate://读取文件按钮
type_ mode=MODE_PRIVATE;
break;
case R.id.btnTypeReadable:
type_ mode=MODE_WORLD_READABLE;
break;
case R.id.btnTypeWriteable:
type_ mode=MODE_WORLD_WRITEABLE;
break;
case R.id.btnTypeWriteableReadableAppend:
type_ mode=MODE_APPEND|MODE_WORLD_READABLE|
MODE_WORLD_WRITEABLE;
break;
}
String content=metSaveContent.getText().toString();
FileOutputStream fos=null;
try{
//按type_ mode指定的模式创建文件、写数据
fos=openFileOutput("mt.txt",type_ mode);
fos.write(content.getBytes());//写入数据
Toast.makeText(this, "save success", 3000).show();
}catch (IOException e){
Log.e("MainAct",e.getMessage(),e);
}finally{
if(fos!=null){
try{
fos.close();//关闭输出流
}catch (IOException e){
Log.e("MainAct",e.getMessage(),e);

}

}

}

}

}


创建项目exerl6_ 09,包名:com.mta.exerl6_9,项目入口:MainAct.java,运行运行效果
如图-5所示:

图一5
(1)当运行图一4,并选择了MODE_PRIVATE按钮后,运行本项目,向exerl6_ 08项目中的同名文件保
存数据,写文件将失败,在日志窗口中显示以下异常信息:

图一6
图一6中的Permission denied:提示向data/data/com.mt.exerl6_ 08/files/mt.txt保存文件
被拒绝。
(2)运行图一4,并选择了MODE_WORLDWRITEABLE,然后运行本项目
a)单击Load按钮,仍出现与图一6相似的异常信息,提示文件不能读取。
b)单击Save按钮。在屏幕上将出现提示信息:success,提出文件保存成功
(3)运行图一4,输入字符串abc,单击MODE_WORD_READABLE,然后运行本项目,单击Load按钮
将出现刚才保存的文本。表明允许其它项目读本项目的文件。
(4)运行图一4输入字符串def,单击MODE_APPEND,将
Data/data/com.mt.exerl6一8/files/mt.txt导出至桌面,打开该文件,将看到
abcdef
表明文本被添加至文件中。
提示:MODE_APPEND权限不允许其它项目读写本项目的文件。
(5)运行图一4输入字符串def,单击
MODE_APPEND|MODE_WORLD_ READABLE|MODE_WORLD_WRITEABLE按钮
运行本项目,单击Load按钮,将出现abcdef,表明最后一次输入的文本添加成功,并且其它项目能读当
前项目的文件。
在图一5最上面输入字符串,张飞,然后单击Save按钮,再单击Load按钮,图一5中下面的编辑
框将出现"张飞"。表明其它项目能写当前项目文件。
关键代码:
//本类对exerl6_ 08创建的不同权限的文件进行读写操作
public class MainAct extends Activity implements OnCIickListener{
EditText metSaveContent;//保存的内容
EditText metLoadContent;//加载的内容
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//实例化各控件
metSaveContent=(EditText) findViewById(R.id.etSaveContent);
metLoadContent=(EditText) findViewById(R.id.etLoadContent);
Button btnSave=(Button) findViewById(R.id.btnSave);
Button btnLoad=(Button) findViewById(R.id.btnLoad);
//设置保存和载入按钮的单击事件
btnSave.setOnCIickListener(this);
btnLoad.setOnCIickListener(this);
}
//重写单击事件响应方法-onCIick()
@Override
public void onClick(View v){
File file=new File("data/data/com.mtexerl6_08/files" , "mt.txt");
switch (v.getId()){
case R.id.btnSave://保存文件按钮
/*
*1-当exerl6_ 09中,fos=openFileOutput的第二参数(文件访问权限)的值是:
MODE_PRIVATE或MODE_WORLD_ READABLE时,
本次写文件操作失败。
*2-当exerl6_ 03中,fos=openFileOutput的第二参数(文件访问权限)的值是:
*MODE_WORLD_WRITEABLE,本次写文件操作成功
*3-当exerl6_ 03中,fos=openFileOutput的第二参数(文件访问权限)的值是:
*MODE_WORLD_WRITEABLE|MODE_WORLD_ READABLE
*本次写文件操作成功
*/

FileOutputStream fos=null;
try{
fos=new FileOutputStream(file);
String content=metSaveContent.getText().toString();
fos.write(content.getBytes());
Toast.makeText(this, "save success", 2000).show();
}catch (IOException e){
Log.e("MainAct",e.getMessage(),e);
}finally{
if(null!=fos){
try{
fos.close();
}catch (IOException e){
Log.e("MainAct",e.getMessage(),e);
}
}
break;
case R.id.btnLoad://读取文件按钮
/*
*读取文件:data/data/com.mt.exerl6_09/files/mt.txt
*1-当exerl6_ 03项目中,fos=openFileOutput的第二个参数是
‘MODE_PRIVATE,本次读取失败
*2-当exerl6_ 03项目中,fos=openFileOutput的第二个参数是
*MODE_WORLD_ READABLE,本次读取成功
*3-当exerl6_ 03中,fos=openFileOutput的第二参数(文件访问权限)的值是:
‘MODE_WORLD_WRITEABLE,本次读文件操作失败
*4-当exerl6_ 03中,fos=openFileOutput的第二参数(文件访问权限)的值是:
*MODE_WORLD_WRITEABLE|MODE_WORLD_ READABLE
*本次读取成功
*/

FileInputStream fis=null;
try{
fis=new FileInputStream(file);
ByteArrayOutputStream bans=new ByteArrayOutputStream();
byte[] buffer=newbyte[1024];
for(int len=0;(len=fis.read(buffer))!=-1;) {
baos.write(buffer,0,len);
metLoadContent.setText(baos.toString());
}catch (IOException e){
Log.e("MainAct",e.getMessage(),e);
}finally{
if(null!=fis){
try{
fis.close();
}catch (IOException e){
Log.e("MainAct",e.getMessage(),e);
break;
}

}

}

 

上一页 下一页