安卓系统中,对SD卡的操作主要包括判断SD卡是否存在、获取SD卡路径、获取SD卡存储信息以及对SD卡进行读写等。
1 判断SD卡是否存在
通过Environment类实现对SD卡信息的获取。Environment类的全称是android.os.Environment,通过该类可以访问系统的环境变量。
通过该类的getExternalStorageState()方法获取外部存储设备的当前状态,该方法返回的是String类型的值。如果SD卡存在,则getExternalStorageState()方法的返回值是Environment类的字段MEDIA_MOUNTED,该字段的值是字符串“mounted”。
String sdState = Environment.getExternalStorageState();
if(sdState.equals(Environment.MEDIA_MOUNTED))
{
Toast.makeText(this, "SD卡存在", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "SD卡不存在", Toast.LENGTH_SHORT).show();
}
在以上代码中,通过getExternalStorageState()
方法获取
SD
卡的状态,并且对
SD
卡的状态进行判断。
2 获取SD卡路径
通过Environment类的getExternalStorageDirectory()方法获取SD卡的路径,该方法的返回值是File类型的对象,表示SD卡路径。
File sdCard = Environment.getExternalStorageDirectory();
Toast.makeText(this, "SD卡绝对路径是"+sdCard.getAbsolutePath(), Toast.LENGTH_SHORT).show();
以上代码中,通过getExternalStorageDirectory()
方法获取到
SD
卡对应的
File
类对象,并通过
File
类的
getAbsolutePath()
方法获取到了
SD
卡的绝对路径。
3 获取SD卡的存储信息
通过StatFs类获取SD卡的存储信息。StatFs类的全称是android.os.StatFs,通过该类可以获取文件系统关于存储空间的所有信息。
3.1 创建StatFs类的对象
StatFs类的构造函数格式为
StatFs(String path);
其中,path
表示文件系统的绝对路径。
StatFs statFs = new StatFs(sdCard.getAbsolutePath());
3.2 获取存储信息
安卓系统的文件系统的空间大小用存储块(block)来表示。要获取SD卡的存储信息,则需要得到每个存储块的大小、可用存储块的数量和总存储块的数量。
通过StatFs类的getBlockCountLong()方法可以获取每个存储块的大小,单位是字节,即每个存储块占的字节数;getFreeBlocks()获取可用存储块的数量;getBlockCount()获取总存储块的数量。
long blockSize = statFs.getBlockSizeLong();
long blockFree = statFs.getFreeBlocksLong();
long block = statFs.getBlockCountLong();
long sdFreeSize = blockSize*blockFree/1024/1024;
long sdSize = blockSize*block/1024/1024;
其中,statFs
是在“
3.1
创建
StatFs
类的对象”中创建的
StatFs
类的对象;
sdFreeSize
和
sdSize
分别表示
SD
卡当前可用容量和总容量,单位是
Mb
。
4 读写SD卡文件
为了要读写SD卡文件,必须获取权限。通过在应用程序的清单文件(AndroidManifest.xml)中添加如下代码获取读写SD卡权限。
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEM"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
之后就可以通过OutputStream/InputStream、Reader/Writer、BufferedReader/BufferedWriter等类实现文件读写了,可参见《通过流实现文件读写的方法》。
通过流文件实现文件读写