原文:http://blog.163.com/hero_213/blog/static/39891214201162123236660/ 该代码片段可以让我们获取internal和external的存储空间大小。

import java . io . File ; import android . os . Environment ; import android . os . StatFs ; public class StorageUtil {
private static final int ERROR = - 1 ;
/** * SDCARD是否存 */ public static boolean externalMemoryAvailable () { return android . os . Environment . getExternalStorageState (). equals ( android . os . Environment . MEDIA_MOUNTED ); }
/** * 获取手机内部剩余存储空间 * @return */ public static long getAvailableInternalMemorySize () { File path = Environment . getDataDirectory (); StatFs stat = new StatFs ( path . getPath ()); long blockSize = stat . getBlockSize (); long availableBlocks = stat . getAvailableBlocks (); return availableBlocks * blockSize ; }
/** * 获取手机内部总的存储空间 * @return */ public static long getTotalInternalMemorySize () { File path = Environment . getDataDirectory (); StatFs stat = new StatFs ( path . getPath ()); long blockSize = stat . getBlockSize (); long totalBlocks = stat . getBlockCount (); return totalBlocks * blockSize ; }
/** * 获取SDCARD剩余存储空间 * @return */ public static long getAvailableExternalMemorySize () { if ( externalMemoryAvailable ()) { File path = Environment . getExternalStorageDirectory (); StatFs stat = new StatFs ( path . getPath ()); long blockSize = stat . getBlockSize (); long availableBlocks = stat . getAvailableBlocks (); return availableBlocks * blockSize ; } else { return ERROR ; } }
/** * 获取SDCARD总的存储空间 * @return */ public static long getTotalExternalMemorySize () { if ( externalMemoryAvailable ()) { File path = Environment . getExternalStorageDirectory (); StatFs stat = new StatFs ( path . getPath ()); long blockSize = stat . getBlockSize (); long totalBlocks = stat . getBlockCount (); return totalBlocks * blockSize ; } else { return ERROR ; } } }

1.硬件上的 block size, 应该是"sector size",linux的扇区大小是512byte 2.有文件系统的分区的block size, 是"block size",大小不一,可以用工具查看 3.没有文件系统的分区的block size,也叫“block size”,大小指的是1024 byte 4.Kernel buffer cache 的block size, 就是"block size",大部分PC是1024 5.磁盘分区的"cylinder size",用fdisk 可以查看。 我们这里的block size是第二种情况,一般SD卡都是fat32的文件系统,block size是4096. 这样就可以知道手机的内部存储空间和sd卡存储空间的总大小和可用大小了。

更多相关文章

  1. android 动态改变控件位置和大小
  2. android vm heap 虚拟机堆大小 每个应用的堆大小
  3. Android(安卓)根据屏幕大小设置字体
  4. android 对软键盘的显示和消失监听
  5. Android_查看linux内核版本和android文件系统版本
  6. delphi xe5 android 关于文件大小的几个问答O(∩_∩)O~
  7. Android(4.X)学习笔记
  8. Android之动态改变控件大小
  9. phonegap sqlite (android)

随机推荐

  1. Android(安卓)Adapter体系介绍
  2. World of Goo(粘粘世界)即将登陆 Android M
  3. 修改开机画面:initlogo.rle
  4. Android系统设置通用接口的编写
  5. Android ActionBar详解
  6. Android Handler 小结
  7. Android(安卓)沉浸式全屏的实现方法
  8. Android 新手入门
  9. [Android(安卓)N]MediaRecorder系列之初
  10. android 3D系列之基本概念篇