安卓系统中对SD卡的操作

来源:互联网 发布:javascript 反编译 编辑:程序博客网 时间:2024/06/01 07:26

安卓系统中,对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类的对象;sdFreeSizesdSize分别表示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/InputStreamReader/WriterBufferedReader/BufferedWriter等类实现文件读写了,可参见《通过流实现文件读写的方法》。

通过流文件实现文件读写