android 獲取儲存空間大小
阿新 • • 發佈:2019-02-07
android手機上面的儲存空間主要有手機本身的儲存空間和SD卡的儲存空間。之前用的最多的是SD卡的儲存空間,在總結的時候看了一下系統的原始碼,很有收穫。在手機安裝應用時,系統會自動在/data/data目錄下面以應用的主包名建立一個目錄,預設還會在最後的那個目錄裡面建立一個lib目錄。下面看一下獲取儲存空間的程式碼:
- import android.os.Environment;
- import android.os.StatFs;
- /**
- * 儲存空間管理
- *
- */
- publicclass MemorySpaceCheck
- {
- /**
-
* 計算剩餘空間
- * @param path
- * @return
- */
- privatestaticlong getAvailableSize(String path)
- {
- StatFs fileStats = new StatFs(path);
- fileStats.restat(path);
-
return (long) fileStats.getAvailableBlocks() * fileStats.getBlockSize(); // 注意與fileStats.getFreeBlocks()的區別
- }
- /**
- * 計算總空間
- * @param path
- * @return
- */
- privatestaticlong getTotalSize(String path)
- {
- StatFs fileStats = new StatFs(path);
- fileStats.restat(path);
- return (long) fileStats.getBlockCount() * fileStats.getBlockSize();
- }
-
/**
- * 計算SD卡的剩餘空間
- * @return 剩餘空間
- */
- publicstaticlong getSDAvailableSize()
- {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
- {
- return getAvailableSize(Environment.getExternalStorageDirectory().toString());
- }
- return0;
- }
- /**
- * 計算系統的剩餘空間
- * @return 剩餘空間
- */
- publicstaticlong getSystemAvailableSize()
- {
- // context.getFilesDir().getAbsolutePath();
- return getAvailableSize("/data");
- }
- /**
- * 是否有足夠的空間
- * @param filePath 檔案路徑,不是目錄的路徑
- * @return
- */
- publicstaticboolean hasEnoughMemory(String filePath)
- {
- File file = new File(filePath);
- long length = file.length();
- if (filePath.startsWith("/sdcard") || filePath.startsWith("/mnt/sdcard"))
- {
- return getSDAvailableSize() > length;
- }
- else
- {
- return getSystemAvailableSize() > length;
- }
- }
- /**
- * 獲取SD卡的總空間
- * @return
- */
- publicstaticlong getSDTotalSize()
- {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
- {
- return getTotalSize(Environment.getExternalStorageDirectory().toString());
- }
- return0;
- }
- /**
- * 獲取系統可讀寫的總空間
- * @return
- */
- publicstaticlong getSysTotalSize()
- {
- return getTotalSize("/data");
- }
- }
- 如果想要在系統的儲存空間中寫入資料,可以用context.getFilesDir().getAbsolutePath(),獲取該應用的可寫目錄,也就是/data/data/應用主包名/files目錄,可以往裡面寫入資料,在應用被解除安裝時,也一併被刪除,不用擔心會產生垃圾,非常給力。