当前位置:文档之家› Android SDCard操作(文件读写,容量计算)(An-Beer 工作室)

Android SDCard操作(文件读写,容量计算)(An-Beer 工作室)

Android SDCard操作(文件读写,容量计算)android.os.Environment提供访问环境变量ng.Objectandroid.os.EnvironmentEnvironment 静态方法:方法: getDataDirectory ()返回: File解释: 返回Data的目录方法: getDownloadCacheDirectory ()返回: File解释: 返回下载缓冲区目录方法: getExternalStorageDirectory ()返回: File解释: 返回扩展存储区目录(SDCard)方法: getExternalStoragePublicDirectory (String type)返回: File解释: 返回一个高端的公用的外部存储器目录来摆放某些类型的文件(来自网上)方法: getRootDirectory ()返回: File解释: 返回Android的根目录方法: getExternalStorageState ()返回: String解释: 返回外部存储设备的当前状态getExternalStorageState () 返回的状态String类型常量:常量: MEDIA_BAD_REMOVAL值 : "bad_removal"解释: 在没有正确卸载SDCard之前移除了常量:MEDIA_CHECKING值 : "checking"解释: 正在磁盘检查常量: MEDIA_MOUNTED值 : "mounted"解释: 已经挂载并且拥有可读可写权限常量: MEDIA_MOUNTED_READ_ONLY值 : "mounted_ro"解释: 已经挂载,但只拥有可读权限常量:MEDIA_NOFS值 : "nofs"解释: 对象空白,或者文件系统不支持常量: MEDIA_REMOVED值 : "removed"解释: 已经移除扩展设备常量: MEDIA_SHARED值 : "shared"解释: 如果SDCard未挂载,并通过USB大容量存储共享常量: MEDIA_UNMOUNTABLE值 : "unmountable"解释: 不可以挂载任何扩展设备常量: MEDIA_UNMOUNTED值 : "unmounted"解释: 已经卸载使用时只需先判断SDCard当前的状态然后取得SdCard的目录即可(见源代码)1//SDcard 操作2public void SDCardTest() {3// 获取扩展SD卡设备状态4 String sDStateString = android.os.Environment.g etExternalStorageState();56// 拥有可读可写权限7if (sDStateString.equals(android.os.Environment. MEDIA_MOUNTED)) {89try {1011// 获取扩展存储设备的文件目录12 File SDFile = android.os.Environment13 .getExternalStorageDirectory();1415// 打开文件16 File myFile = new File(SDFile.getAbsoluteP ath()17 + File.separator + "MyFile.txt");1819// 判断是否存在,不存在则创建20if (!myFile.exists()) {21 myFile.createNewFile();22 }2324// 写数据25 String szOutText = "Hello, World!";26 FileOutputStream outputStream = new FileOu tputStream(myFile);27 outputStream.write(szOutText.getBytes());28 outputStream.close();2930 } catch (Exception e) {31// TODO: handle exception32 }// end of try3334 }// end of if(MEDIA_MOUNTED)35 // 拥有只读权限36else if (sDStateString37 .endsWith(android.os.Environment.MEDIA_MO UNTED_READ_ONLY)) {3839// 获取扩展存储设备的文件目录40 File SDFile = android.os.Environment.getExter nalStorageDirectory();4142// 创建一个文件43 File myFile = new File(SDFile.getAbsolutePath () + File.separator44 + "MyFile.txt");4546// 判断文件是否存在47if (myFile.exists()) {48try {4950// 读数据51 FileInputStream inputStream = new File InputStream(myFile);52byte[] buffer = new byte[1024];53 inputStream.read(buffer);54 inputStream.close();5556 } catch (Exception e) {57// TODO: handle exception58 }// end of try59 }// end of if(myFile)60 }// end of if(MEDIA_MOUNTED_READ_ONLY)61 }// end of func计算SDCard的容量大小android.os.StatFs一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况ng.Objectandroid.os.StatFs构造方法:StatFs (String path)公用方法:方法: getAvailableBlocks ()返回: int解释:返回文件系统上剩下的可供程序使用的块方法: getBlockCount ()返回: int解释: 返回文件系统上总共的块方法: getBlockSize ()返回: int解释: 返回文件系统一个块的大小单位byte方法: getFreeBlocks ()返回: int解释: 返回文件系统上剩余的所有块包括预留的一般程序无法访问的方法: restat (String path)返回: void解释: 执行一个由该对象所引用的文件系统雷斯塔特.(Google翻译)想计算SDCard大小和使用情况时, 只需要得到SD卡总共拥有的Block数或是剩余没用的Bl ock数,再乘以每个Block的大小就是相应的容量大小了单位byte.(见代码)1public void SDCardSizeTest() {23// 取得SDCard当前的状态4 String sDcString = android.os.Environment.getExt ernalStorageState();56if (sDcString.equals(android.os.Environment.MEDI A_MOUNTED)) {78// 取得sdcard文件路径9 File pathFile = android.os.Environment10 .getExternalStorageDirectory();1112 android.os.StatFs statfs = new android.os.Sta tFs(pathFile.getPath());1314// 获取SDCard上BLOCK总数15long nTotalBlocks = statfs.getBlockCount(); 1617// 获取SDCard上每个block的SIZE18long nBlocSize = statfs.getBlockSize();1920// 获取可供程序使用的Block的数量21long nAvailaBlock = statfs.getAvailableBlocks ();2223// 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)24long nFreeBlock = statfs.getFreeBlocks();2526// 计算SDCard 总容量大小MB27long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024;2829// 计算 SDCard 剩余大小MB30long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024;31 }// end of if32 }// end of func。

相关主题