Android的文件存储分为外部存储和内部存储(即External storage 和 internal storage)
我们用AS链接手机,view->Tool windows ->Devices File Explorer 查看手机存储
外部存储:
外部存储分为两种:外部私有存储和外部公开存储
外部私有存储:/storage/emulated/0/Android/data/<包名>/
外部公开存储:/storage/emulated/0下除了"外部私有存储"的剩下的都是外部公开存储
那么电脑如何查看外部存储呢?手机链接电脑,Adb选择文件传输后,电脑手机查看到的文件就是内存存储 /storage/emulated/0 目录下所有的文件
外部私有存储:
我们看上图,发现只要我们android了应用,系统便在报名下创建了两个文件夹,对应这我们的连个方法
Context.getExternalFilesDir()和Context.getExternalCacheDir()
那么他们有什么区别呢?getExternalFilesDir是永久存储的,除非手动删除,getExternalCacheDir当系统内存不足的时候,会删除这里的数据,不是永久的。但是两者在app卸载的时候都会清空。
//非公开的外部存储,file目录 ,一般用来存储长久的数据,系统不会回收,只有用户手动回收
//public abstract File getExternalFilesDir(@Nullable String type); type是系统为我们提供了几个
//规范的文件夹,当然你也可以不采纳: {@link android.os.Environment#DIRECTORY_MUSIC},
// * {@link android.os.Environment#DIRECTORY_PODCASTS},
// * {@link android.os.Environment#DIRECTORY_RINGTONES},
// * {@link android.os.Environment#DIRECTORY_ALARMS},
// * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
// * {@link android.os.Environment#DIRECTORY_PICTURES}, or
// * {@link android.os.Environment#DIRECTORY_MOVIES}.
val externalFilesDir = baseContext.getExternalFilesDir("sujinbiao")
if (!externalFilesDir!!.exists()){
externalFilesDir.mkdirs()
}
Log.e("SPLOG","externalFilesDir=${externalFilesDir.path}")
//非公开的外部存储 cache,一般用来保存临时数据,如果系统存储不足的时候,系统会回收这里的数据
val mExternalCacheDir = baseContext.externalCacheDir
val mCacheDir = File(mExternalCacheDir, "sujinbiaoTest")
if (!mCacheDir!!.exists()){
mCacheDir.mkdirs()
}
Log.e("SPLOG","CacheDir=${mCacheDir.path}")
打印结果:
externalFilesDir=/storage/emulated/0/Android/data/包名/files/sujinbiao
CacheDir=/storage/emulated/0/Android/data/包名/cache/sujinbiaoTest
内部存储:
因为内部存储只有root后才能看下,我们同样按上面的方法,AS链接手机查看。
内存存储在 :data/data/包名
同理,系统也会为我们创建如下几个文件
cache: context.getCacheDir() 系统内存不够的时候,会清除
code_cache : context.getCodeCacheDir()存放运行时代码优化等产生的缓存,一般系统使用
files:context.getFilesDir() 永久保存的,除非手动清除
shared_prefs:系统用于存储SharedPreference的xml文件
一般记得用Context获取的File根路径都是私有目录的。android对单个应用的内部存储有大小限制,各个手机不一样,但是现在这个限制已经很大了,大约5-20G左右
Android内部存储与外部存储(私有目录与公共目录)图文详解
参考文档: http://blog.youkuaiyun.com/fancylovejava/article/details/49490663