You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Android外部存储(External storage)和内部存储(Internal storage)目录路径

Android内外存储路径获取及容量计算方案

内部存储路径获取

内部存储属于系统核心存储区域,分为应用私有内部存储和系统总内部存储两类,对应获取方式如下:

  • 应用私有内部存储路径:调用context.getFilesDir().getAbsolutePath()即可获取,该路径下的文件仅当前应用可读写,不需要额外申请权限,应用卸载时路径下的内容会同步删除
  • 系统总内部存储路径:调用Environment.getDataDirectory().getAbsolutePath()即可获取,用于计算整个系统内部存储的总容量、可用容量

外部存储路径获取

android.os.Environment.getExternalStorageDirectory()(安卓操作系统环境类获取外部存储目录方法)在Android 10(API 29)及以上版本已被官方废弃,直接调用会返回错误路径或抛出权限异常,需按系统版本适配获取逻辑:

适配Android 9及更低版本(API ≤ 28)

  • 提前在清单文件中申请存储权限:android.permission.READ_EXTERNAL_STORAGE、android.permission.WRITE_EXTERNAL_STORAGE,运行时动态申请权限通过后,再调用Environment.getExternalStorageDirectory().getAbsolutePath()即可获取公共外部存储的根路径

适配Android 10及更高版本(API ≥ 29)

分区存储规则下,普通应用无法直接访问公共外部存储的根路径,分两种场景获取对应路径:

  • 仅需计算应用专属外部存储容量:调用context.getExternalFilesDir(null).getAbsolutePath()即可获取专属路径,无需申请权限,应用卸载时内容同步清除
  • 需计算整个公共外部存储容量:直接调用系统StorageManager服务获取存储卷信息即可,无需申请权限,示例代码如下:
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
// 获取主外部存储卷
StorageVolume primaryVolume = storageManager.getPrimaryStorageVolume();
long totalExternalSize = primaryVolume.getTotalSpace();
long availableExternalSize = primaryVolume.getFreeSpace();

通用容量计算方法

拿到合法的存储路径后,可通过StatFs类统一计算容量信息:

// 传入合法的存储路径字符串
StatFs statFs = new StatFs(targetPath);
long blockSize = statFs.getBlockSizeLong();
// 总容量 = 块数量 × 单块大小
long totalSpace = statFs.getBlockCountLong() * blockSize;
// 可用容量 = 可用块数量 × 单块大小
long availableSpace = statFs.getAvailableBlocksLong() * blockSize;

注意容量单位转换时,要和系统显示规则对齐,商用场景建议按1GB=1000MB转换,技术场景可按1GB=1024MB转换,避免出现显示容量和实际计算容量不符的问题。

内容的提问来源于stack exchange,提问作者Raj Bhagat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:54:03