【Tricks】 Android 儲存空間相關
阿新 • • 發佈:2018-12-22
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;}