Android存储及getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区别
存储介绍 Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。一般我们存储内容都会放在外部存储空间里。使用过程注意事项: 先判断SD卡是否可用,可用时优先使用SD卡的存储,不可用时用内部存储 存储在SD卡上时,可以在SD卡上新建任意一个目录存放,也可以存放在应用程序内部文件夹,区别是在SD卡的任意目录存放时内容不会随应用程序的卸载而消失,而在应用程序内部的内容会随应用程序卸载消失。 一般缓存文件放在应用程序内部,用户主动保存的文件放在SD卡上的文件夹里。如果在SD卡上任意新建目录存放所有数据,用户卸载时会残存大量文件,招致用户反感。 存储路径 一般我们可以通过 Context 和 Environment 相关的方法获取文件存取的路径。 1.内部存储 1.1 根目录($rootDir):/data,通过 Environment.getDataDirectory() 获取。 1.2 应用程序目录($applicationDir):$rootDir/data/包名(不一定,不同设备可能不同) 应用缓存目录:$applicationDir/cache,通过Context.getCacheDir()获取。 应用文件目录:$applicationDir/files,通过Context.getFilesDir()获取。Context.getFileStreamPath(String name)返回以name为文件名的子文件目录,若name为空,则返回文件根目录。假设我们的应用程序包名为com.learn.test,路径如下: Environment.getDataDirectory(): /data Context.getCacheDir(): /data/data/com.learn.test/cache Context.getFilesDir(): /data/data/com.learn.test/files Context.getFileStreamPath(""): /data/data/com.learn.test/files Context.getFileStreamPath("test"): /data/data/com.learn.test/files/test 2.外部存储 2.1 根目录($rootDir):/storage/emulated/0(不一定,不同设备可能不同),通过 Environment.getExternalStorageDirectory() 获取。 2.2 应用程序目录($applicationDir):$rootDir/Andorid/data/包名 应用缓存目录:$applicationDir/cache,通过Context.getExternalCacheDir()获取。 应用文件目录:$applicationDir/files,通过Context.getExternalFilesDir(String type),type为空字符串时获取。type系统给我们提供了很多常用的类型,比如图片和下载等等: public static String DIRECTORY_MUSIC = "Music"; public static String DIRECTORY_ALARMS = "Alarms"; public static String DIRECTORY_NOTIFICATIONS = "Notifications"; public static String DIRECTORY_PICTURES = "Pictures"; public static String DIRECTORY_MOVIES = "Movies"; public static String DIRECTORY_DOWNLOADS = "Download"; public static String DIRECTORY_DCIM = "DCIM"; public static String DIRECTORY_DOCUMENTS = "Documents"; 假设我们的应用程序包名为com.learn.test,路径如下: Environment.getExternalStorageDirectory(): /storage/emulated/0 Context.getExternalCacheDir(): /storage/emulated/0/Android/data/com.learn.test/cache Context.getExternalFilesDir(""): /storage/emulated/0/Android/data/com.learn.test/files Context.getExternalFilesDir("test"): /storage/emulated/0/Android/data/com.learn.test/files/test Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Android/data/com.learn.test/files/Pictures 2.3 公共存储目录: 我们可以在外部存储上新建任意文件夹,不过在6.0及之后的系统需要动态申请权限,这些目录的内容不会随着应用的卸载而消失。如: Environment.getExternalStorageDirectory(): /storage/emulated/0 Environment.getExternalStoragePublicDirectory(""): /storage/emulated/0 Environment.getExternalStoragePublicDirectory("test"): /storage/emulated/0/test Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Pictures
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2016-11-26 JAVA基本数据类型及其转换
2015-11-26 objective-c 关键字和概念
2015-11-26 如何在Objective-C中实现链式语法?
2015-11-26 _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途
2015-11-26 Swift静态属性
2015-11-26 Swift静态方法
2015-11-26 objective-c 中代码块(blocks)