【Tricks】 Android 存储空间相关

1. 填满存储存储空间方法:

1.1 填满手机空间

在mnt/sdcard目录下创建一个文件,并且快速增长,填充满手机内部存储空间
adb shell  dd if=/dev/zero of=/mnt/sdcard/bigfile

写完后:
这里写图片描述

1.2 或者指定填充大小:

adb shell dd if=/dev/zero of=/mnt/sdcard/bigfile bs=400000000 count=1  

//bs=400000000 大概为3.7G
//能这样做的前提是 获取手机的 root 权限!并且 USB 设置不能设为 U盘功能!
//dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
//if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
//of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
// /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见
//相当于将这个不断产生null流的文件拷贝至bigfile处

详细参考: Android ADB shell 填充SD卡方法详解整理

2. Java层获取指定分区存储的空闲大小:

/**
 * 显示存储的剩余空间
 */
public void  showAvailableSize(){
...
String DATA_PATH = Environment.getDataDirectory().getAbsolutePath();
long dataSize= getAvailSpace(DATA_PATH);//手机内部data分区可用存储大小
Log.d("CDGS","Available Data Size :"+Formatter.formatFileSize(this,dataSize));//得到的是有单位的值
...
}

/**
 * 获取某个目录的可用空间
 */
public long getAvailSpace(String path){
    StatFs statfs = new StatFs(path);
    long size = statfs.getBlockSizeLong();//获取分区的大小
    long count = statfs.getAvailableBlocksLong();//获取可用分区块的个数
    return size*count; //单位是byte
}

对应其他分区的目录可以通过Environment中的方法进行获取,不过其中有些方法是hide修饰的,三方应用需要使用反射才能调用:

//frameworks/base/cor/java/android/os/Environment.java
private static final File DIR_ANDROID_ROOT = getDirectory(ENV_ANDROID_ROOT, "/system");
private static final File DIR_ANDROID_DATA = getDirectory(ENV_ANDROID_DATA, "/data");
private static final File DIR_DOWNLOAD_CACHE = getDirectory(ENV_DOWNLOAD_CACHE, "/cache");

public static File getRootDirectory() {return DIR_ANDROID_ROOT;}
public static File getDataDirectory() {return DIR_ANDROID_DATA;}
public static File getDownloadCacheDirectory() {return DIR_DOWNLOAD_CACHE;}

猜你喜欢

转载自blog.csdn.net/TaylorPotter/article/details/77412299