安卓系统中,对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等类实现文件读写了,可参见《通过流实现文件读写的方法》。


通过流文件实现文件读写