当前位置:首页 > 技术 > 正文内容

Android 获取系统目录路径的完整指南

访客 技术 2026年6月19日 1

在 Android 开发中,获取正确的目录路径是文件读写操作的基础。不同 API 返回的路径位置有所差异,有的会自动创建目录,有的则不会。以下详细总结各种目录获取方法及其行为特点。

内部存储路径获取

内部存储相关方法集中在 Context 类中,主要涉及 /data/user/0/packageName/ 下的子目录。

Context context = getApplicationContext();

// 应用私有数据根目录,应用启动后直接存在,不自动创建
String dataDir = context.getDataDir().getAbsolutePath();
// 结果:/data/user/0/com.example.app

// 应用内部文件存储目录,不存在时自动创建
String filesDir = context.getFilesDir().getAbsolutePath();
// 结果:/data/user/0/com.example.app/files

// 应用内部缓存目录,自动创建
String cacheDir = context.getCacheDir().getAbsolutePath();
// 结果:/data/user/0/com.example.app/cache

// 代码缓存目录,自动创建
String codeCacheDir = context.getCodeCacheDir().getAbsolutePath();
// 结果:/data/user/0/com.example.app/code_cache

// 备份排除目录,自动创建
String noBackupDir = context.getNoBackupFilesDir().getAbsolutePath();
// 结果:/data/user/0/com.example.app/no_backup

数据库路径与方法

getDatabasePath(String name) 不会创建数据库文件或目录,仅返回预期路径。注意:调用时需包含 .db 后缀。

// 仅返回路径,不创建任何文件或目录
String dbPath = context.getDatabasePath("mydb.db").getAbsolutePath();
// 结果:/data/user/0/com.example.app/databases/mydb.db

自定义内部目录

通过 getDir(String name, int mode) 可以在应用私有目录下创建自定义文件夹,前缀自动加上 app_

// 该调用会自动创建目录 /data/user/0/com.example.app/app_custom
File customDir = context.getDir("custom", Context.MODE_PRIVATE);
// 输出:/data/user/0/com.example.app/app_custom

外部存储路径(应用私有)

外部存储路径通常在 /storage/emulated/0/Android/data/packageName/ 下,这些目录会在应用卸载时自动删除。

// 获取外部文件目录,自动创建
String extFiles = context.getExternalFilesDir(null).getAbsolutePath();
// 结果:/storage/emulated/0/Android/data/com.example.app/files

// 传入参数可指定子文件夹,自动创建
String extPics = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath();
// 结果:/storage/emulated/0/Android/data/com.example.app/files/Pictures

// 外部缓存目录,自动创建
String extCache = context.getExternalCacheDir().getAbsolutePath();
// 结果:/storage/emulated/0/Android/data/com.example.app/cache

getExternalFilesDir 与 getExternalFilesDirs 区别

当设备有 SD 卡时,区别明显:

  • getExternalFilesDir(type):返回主外部存储路径(即手机自带的外部存储分区)。
  • getExternalFilesDirs(type):返回所有可用的外部存储路径数组,包括主外部存储和 SD 卡等扩展存储。

重要:应用卸载时只有主外部存储下的文件会被删除,SD 卡等扩展存储上的文件会保留。

Environment 获取系统级目录

Environment.getDataDirectory().getAbsolutePath();  // /data
Environment.getRootDirectory().getAbsolutePath();  // /system
Environment.getExternalStorageDirectory().getAbsolutePath(); // /storage/emulated/0
Environment.getStorageDirectory().getAbsolutePath(); // /storage
Environment.getDownloadCacheDirectory().getAbsolutePath(); // /data/cache

// 公共目录,无需应用包名
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
// 结果:/storage/emulated/0/Download

关键点总结

  • getExternalFilesDir()getDir() 等会自动创建目录,getDatabasePath() 仅返回路径不创建。
  • 使用 getDatabasePath() 时需包含 .db 后缀。
  • 应用卸载时,getExternalFilesDir() 下的文件会被删除,但 SD 卡上其他路径不受影响。
  • 传入 null 或空字符串给 getExternalFilesDir() 得到的是 files 根目录,不会创建额外文件夹。

参考来源

标签: Android

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。