该代码片段可以让我们获取 internal 和 external 的存储空间大小.
- import java.io.File;
- import Android.os.Environment;
- import Android.os.StatFs;
- publicclassStorageUtil{
- privatestaticfinalint ERROR =-1;
- /**
- * SDCARD 是否存
- */
- publicstaticboolean externalMemoryAvailable(){
- return Android.os.Environment.getExternalStorageState().equals(
- Android.os.Environment.MEDIA_MOUNTED);
- }
- /**
- * 获取手机内部剩余存储空间
- * @return
- */
- publicstaticlong getAvailableInternalMemorySize(){
- File path =Environment.getDataDirectory();
- StatFs stat =newStatFs(path.getPath());
- long blockSize = stat.getBlockSize();
- long availableBlocks = stat.getAvailableBlocks();
- return availableBlocks * blockSize;
- }
- /**
- * 获取手机内部总的存储空间
- * @return
- */
- publicstaticlong getTotalInternalMemorySize(){
- File path =Environment.getDataDirectory();
- StatFs stat =newStatFs(path.getPath());
- long blockSize = stat.getBlockSize();
- long totalBlocks = stat.getBlockCount();
- return totalBlocks * blockSize;
- }
- /**
- * 获取 SDCARD 剩余存储空间
- * @return
- */
- publicstaticlong getAvailableExternalMemorySize(){
- if(externalMemoryAvailable()){
- File path =Environment.getExternalStorageDirectory();
- StatFs stat =newStatFs(path.getPath());
- long blockSize = stat.getBlockSize();
- long availableBlocks = stat.getAvailableBlocks();
- return availableBlocks * blockSize;
- }else{
- return ERROR;
- }
- }
- /**
- * 获取 SDCARD 总的存储空间
- * @return
- */
- publicstaticlong getTotalExternalMemorySize(){
- if(externalMemoryAvailable()){
- File path =Environment.getExternalStorageDirectory();
- StatFs stat =newStatFs(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 卡存储空间的总大小和可用大小了.
再分享一下我老师大神的人工智能教程吧. 零基础! 通俗易懂! 风趣幽默! 还带黄段子! 希望你也加入到我们人工智能的队伍中来! http://www.captainbed.net/
来源: http://www.bubuko.com/infodetail-2974325.html