Android 4.4 之前,儲存空間:
Android 4.4 之後,儲存空間:
檢查外部儲存:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
for (File file : files) {
logger.error("main " + String.valueOf(file));
}
}
輸出
手機本身的外部儲存
/storage/emulated/0/Android/data/packname/files/mounted
外插 SD card 的外部儲存
/storage/B3E4-1711/Android/data/packname/files/mounted
/data
開頭的目錄,為內部儲存
/storage
開頭的目錄,為外部儲存
/system
開頭的目錄,存放系統文件;Environment.getRootDirectory()
取得
/cache
開頭的目錄,存放暫存文件;Environment.getDownloadCacheDirectory()
取得
此處的 Environment
為內建 static method,用於檔案路徑、目錄的檢查與存取
Example
// Android 系統的數據目錄
Environment.getDataDirectory().getPath():
// /data
// Android 系統的根目錄
Environment.getRootDirectory().getPath():
// /system
Environment.getStorageDirectory().getPath():
// /storage
// 系統下載快取目錄
Environment.getDownloadCacheDirectory().getPath():
// /data/cache
// 外部儲存設備上的公共儲存目錄(如音樂、照片等)
Environment.getExternalStoragePublicDirectory("").getPath():
// /storage/emulated/0
// // /storage/emulated/Music
// // /storage/emulated/Pictures
// // /storage/emulated/Download
// // /storage/emulated/DCIM
// // ... (可在手機的“檔案管理”實際看到這些對應的目錄)
// 外部儲存設備的根目錄
Environment.getExternalStorageDirectory().getPath():
// /storage/emulated/0
// // /storage/emulated/Music
// // /storage/emulated/Pictures
// // /storage/emulated/Download
// // /storage/emulated/DCIM
// // ... (可在手機的“檔案管理”實際看到這些對應的目錄)
// 應用程式的內部儲存目錄
getFilesDir().getPath():
// /data/user/0/com.maxkit.msicloud_android/files
// 應用程式的內部快取目錄
getCacheDir().getPath():
// /data/user/0/com.maxkit.msicloud_android/cache
// 應用程式的數據目錄
getDataDir().getPath():
// /data/user/0/com.maxkit.msicloud_android
// 取應用程式的外部快取目錄
getExternalCacheDir().getPath():
// /storage/emulated/0/Android/data/com.maxkit.msicloud_android/cache
// 應用程式的代碼快取目錄。應用程式的編譯代碼和優化的快取文件,通常不需要直接操作這個目錄。它是由 Android 系統管理
getCodeCacheDir().getPath():
// /data/user/0/com.maxkit.msicloud_android/code_cache
getExternalFilesDir(""):
// /storage/emulated/0/Android/data/com.maxkit.msicloud_android/files/mounted
// /storage/emulated/0/Android/data/com.maxkit.msicloud_android/files/shared_prefs
// 應用程式的外部檔案目錄
getExternalFilesDirs(""):
// /storage/emulated/0/Android/data/com.maxkit.msicloud_android/files
// 應用程式的外部快取目錄
getExternalCacheDirs():
// /storage/emulated/0/Android/data/com.maxkit.msicloud_android/cache
// 應用程式的外部媒體目錄列表
getExternalMediaDirs():
// /storage/emulated/0/Android/media/com.maxkit.msicloud_android
public static long getInternalTotalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stat.getBlockCountLong();
return totalBlocks * blockSize;
}
public static long getInternalAvailableMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long availableBlocks = stat.getAvailableBlocksLong();
return availableBlocks * blockSize;
}
public static boolean isSDCardEnable() {
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
}
public static long getExternalTotalMemorySize() {
if (!isSDCardEnable()) {
return -1;
}
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stat.getBlockCountLong();
return totalBlocks * blockSize;
}
public static long getExternalAvailableMemorySize() {
if (!isSDCardEnable()) {
return -1;
}
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long blockSize, availableBlocks;
availableBlocks = stat.getAvailableBlocksLong();
blockSize = stat.getBlockSizeLong();
return availableBlocks * blockSize;
}
public static void showCapacity() {
long internal_total_size = getInternalTotalMemorySize();
long internal_avl_size = getInternalAvailableMemorySize();
long external_total_size = getExternalTotalMemorySize();
long external_avl_size = getExternalAvailableMemorySize();
logger.debug(
"內部總共: " + internal_total_size + " (" + FileUtils.convertUnit(internal_total_size, FileUtils.SizeUnit_Auto) + "), " +
"內部剩餘: " + internal_avl_size + " (" + FileUtils.convertUnit(internal_avl_size, FileUtils.SizeUnit_Auto) + "), " +
"外部總共: " + external_total_size + " (" + FileUtils.convertUnit(external_total_size, FileUtils.SizeUnit_Auto) + "), " +
"外部剩餘: " + external_avl_size + " (" + FileUtils.convertUnit(external_avl_size, FileUtils.SizeUnit_Auto) + ")"
);
}
Android之获取手机内部及sdcard存储空间
细说Android的内部存储和外部存储
彻底搞懂Android文件存储–-内部存储,外部存储以及各种存储路径解惑
解析Android内部存储、外部存储的区别
IO相關