android文件读写以及不同应用之间的文件读写操作

这篇博客详细分析了Android应用程序中如何进行文件的读写操作,包括使用`openFileOutput`设置读写权限,并展示了如何在不同应用之间通过`FileInputStream`和`FileOutputStream`读写文件。同时,还探讨了如何进行跨应用文件权限的单元测试,强调了在测试时不能直接使用基于自身上下文的`openFileInput`方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/********************************************/
>android文件读写以及不同应用之间的文件读写操作
/********************************************/


0.代码分析
/********************************************/
public class MainActivity extends Activity {
	private EditText fileName;
	private EditText content;
	
	//定义一个匿名的内部类根据触发的不同的按钮进行处理
	private View.OnClickListener listener = new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			// v表示当前被点击触发的按钮的引用
			String cont = MainActivity.this.content.getText().toString();
			String fname = MainActivity.this.fileName.getText().toString();
			int rid = R.string.success;

			switch (v.getId()) {
			case R.id.button:
				try {
					FileOutputStream outStream = MainActivity.this
					//Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE表示具有读写权限
							.openFileOutput(fname, Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
					FileService.save(outStream, cont);//将内容写入磁盘
				} catch (Exception e) {
					Log.i("MainActivity", "保存内容出现错误:\n"+e.toString());
					rid = R.string.error;
				}
				break;
			case R.id.showbutton:
				try {
					FileInputStream finStream = MainActivity.this
							.openFileInput(fname);
					Log.i("MainActivity", "读取结果:\n"+FileService.read(finStream));
				} catch (FileNotFoundException e) {
					Log.i("MainActivity","没有找到需要读取的文件:\n"+ e.toString());
					rid = R.string.error;
				} catch (IOException e) {
					Log.i("MainActivity", "读取文件流出现异常:\n"+e.toString());
					rid = R.string.error;
				}
				break;
			}
			//做出消息响应
			Toast.makeText(MainActivity.this, rid, Toast.LENGTH_LONG).show();
		}
	};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		fileName = (EditText) this.findViewById(R.id.fileName);
		content = (EditText) this.findViewById(R.id.content);

		Button savebtn = (Button) this.findViewById(R.id.button);
		Button showbtn = (Button) this.findViewById(R.id.showbutton);

		savebtn.setOnClickListener(this.listener);
		showbtn.setOnClickListener(this.listener);
	}
}
/********************************************/

1.如何在另外一个应用中做单元测试检测我是否有权限访问某个别的应用创建的文件
/********************************************/
public class testFilePermission extends AndroidTestCase {
	public static String read(InputStream inStream)throws IOException {
		byte[] bt = new byte[inStream.available()];
		inStream.read(bt);
		return new String(bt);
	}
	
	public void testRead(){
		try {
			File file = new File("/data/data/com.zyb.file/files/hh");
			//需要注意的是这里我不是用的
			//this.getContext().openFileInput("/data/data/com.zyb.file/files/hh")
			//这个方法这个方法是错误的因为他是基于他自己的上下文的路径去访问的
			FileInputStream finStream = new FileInputStream(file);
			Log.i("testFilePermission", read(finStream));
		} catch (IOException e) {
			Log.i("testFilePermission","异常:\n"+ e.toString());
		}
	}
}
/********************************************/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值