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;}