1. 程式人生 > >【Tricks】 Android 儲存空間相關

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