android简单实例---------------SD卡(外部)存储的使用与讲解

本文介绍了Android中如何使用外部存储,即SD卡进行数据存储。针对4.0之前和之后的系统版本,给出了不同的存储路径。关键操作包括检查SD卡状态和获取根目录,并强调了写入权限 `<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>` 的重要性。虽然理论上读取操作也需要权限 `<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>`,但作者在测试中发现不添加此权限也能读取SD卡内容,具体原因未详。

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

android的第三种存储方式,外部存储,也就是存储进SD卡中


-------------------------------------------------------------------------------------

输出存储代码:

//外部存储(即往手机SD卡里面存储)
		
		//1.判断外部存储设备是否可用
		//Environment是android对外部设备的一个抽象封装,里面有许多关于SD卡此类外部设备的方法和属性使用
		//getExternalStorageState()获取SD卡的状态,返回一个字符串  
		//Environment.MEDIA_MOUNTED  表示SD卡可用的常量
		Log.i("MainActivity",Environment.getExternalStorageState());
		if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			return;//若SD卡不可用 直接返回。
		}
		
		//获取SD卡根目录
		File file = Environment.getExternalStorageDirectory();
		//创建自己的文件
		File myFile = new File(file, "myFile.txt");
		
		//进行IO操作存储 数据(此处就不判断文件是否存在等因素了)
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(myFile);
			//进行IO存储(简单的存储一下,不模拟复杂的方式了)
			Log.i("MainActivity","---------->");
			fos.write("我是通过外部存储方式存储进来的内容".getBytes());
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(fos!=null){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

存储的 文件保存路径:

android 4.0之前的:mnt/sdcard

android 4.0之后的:storage/sdcard



要进行外部存储的操作,重要的两个操作就是Environment.getExternalStorageState()获取SD卡状态和Environment.getExternalStorageDirectory()获取SD卡根目录,接下来的操作就是正常的IO操作了。注意:对SD卡进行写操作得在AndroidMainFest文件里面添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


读取操作:

//判断外部存储设备的状态
		if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			return ;
		}
		
		//获取SD卡根目录
		File file = Environment.getExternalStorageDirectory();
		//获取要操作的文件实例
		File myFile = new File(file,"myFile.txt");
		//判断文件是否存在
		if(!myFile.exists()){
			Log.i("MainActivity", "文件不存在");
			return ;
		}
		//获取输入流
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(myFile);
			//用来保存数据
			StringBuilder sb = new StringBuilder();
			//IO操作读取数据
			byte[] buff = new byte[1024];
			int len = 0;
			while((len = fis.read(buff))!=-1){
				sb.append(new String(buff,0,len));
			}
			
			Log.i("MainActivity", sb.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(fis!=null){
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

读取操作和写入代码几乎一样,只是方向不一样,就不多说了。注意的地方,读取SD卡也需要加入权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>,理论上来讲是需要的,但是我写这个例子的时候模拟器出了些问题,SD卡是通过CMD命令行添加进去的,然后测试的时候竟然不添加这条权限也可以读取到SD卡内容,具体什么原因还没有去细究,知道的人也可以留言告诉我


-------------------------------------------------------

原创,我在这里说明一下,这里的例子都是非常简单的例子,更适合初学者,只有先学会用,才能研究更深层次的东西,初学者千万不要陷入诸如每个参数到底是什么意思,这里不这样,如果那样会怎么样,这是无穷无尽的问题,非常影响入门,只有用熟悉之后,才更容易的去纠结这些东西,所以我在这里不写这些东西了。只适合初学者看看的例子。。。微笑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值