注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。
文章内容来自:
android应用相关目录的存取方式与函数解析---全
前言
当进行文件读取时,常见的问题有:
1.文件保存到哪里?
2.相关函数是什么?目录权限?
3.删除应用后目录是否会随之删除?
目录
一般存储的路径有三种:
/data/data/package_name/ (会随着应用的卸载一起删除掉)【内部存储】
--1.1 xxx/shared_prefs/ 存储SharedPreference
--1.2 xxx/databases/ 存储数据库DB (待补)
--1.3 xxx/app_webview 存储webview相关 (待补)
--1.4 xxx/lib 存储.so静态库文件 (待补)
--1.5 xxx/cache getCacheDir() 存放临时
--1.6 xxx/files 文件存储 getFilesDir() openFileInput openFileOutput 存放长久
--1.7 xxx/custom 创建自己的目录 getDir()SD卡Android目录下的2个子目录(会随着应用的卸载一起删除掉) 【外部存储】
--2.1 /mnt/sdcard/Android/data/package_name/
----2.1.1 xxx/files/ getExternalFilesDir() 存放长久
----2.1.2 xxx/cache/ getExternalCacheDir() 存放临时
--2.2 Android/obb/package_name/SD卡自定义的文件目录(卸载应用之后不会删除) 【外部存储】 SD卡自定义存储
--/mnt/sdcard/
附录:getXXX函数们的区别
1./data/data/package_name/
该目录是只对应用可见的,而且如果手机没有root,用adb也是看不了这个目录。
该目录用来存储和应用周期相关的文件,会随着应用的卸载一起删除掉。
1.1 xxx/shared_prefs/ 存储SharedPreference
/data/data/package_name/shared_prefs/
SharedPreference存储操作看Android存储技术初级篇的2.SharedPreference存储
1.2 xxx/databases/ 存储数据库DB
/data/data/package_name/databases/
相关函数还有getDatabasePath()
1.3 xxx/app_webview 存储webview相关
/data/data/package_name/app_webview
/data/data/package_name/xxxwebviewcachexxx
用来存储应用内置webview所产生的cache和cookies等,该目录由于android版本不同名字和位置也可能不同
1.4 xxx/lib 存储.so静态库文件
/data/data/package_name/lib
用来存储该应用的.so静态库文件
1.5 xxx/cache
/data/data/package_name/cache
该目录可以使用函数getCacheDir()获取
1.6 xxx/files
/data/data/package_name/files
该目录可以使用函数getFilesDir()获取,
openFileInput()和openFileOutput()函数也是在该目录下操作文件,
fileList()函数是用来列出该files目录下的所有文件,
deleteFile(String name)用来删除该files目录下的文件
openFileInput()和openFileOutput()函数如何进行操作看Android存储技术初级篇的1.文件存储
1.7 xxx/custom 创建自己的目录
/data/data/package_name/ 这个目录下面当然也能够创建子集的目录,使用的方法就是getDir(String name, int mode),参数中的name就是需要在该目录下创建的子目录名字
2. SD卡Android目录下的2个子目录
该目录是挂载到SD卡(/mnt/sdcard/ )下面的,所以SD不可用时,这两个目录都是无效的.
同样和应用周期相关的文件,会随着应用的卸载一起删除掉.
注意需要权限
2.1 /mnt/sdcard/Android/data/package_name/
2.1.1 xxx/files/
Android/data/package_name/files/
该目录可用getExternalFilesDir(String type)和getExternalFilesDirs(String type)获取,参数type为子目录名字,null则为根目录,后者调用之后会自动生成该目录
2.1.2 xxx/cache/
Android/data/package_name/cache/
该目录可用getExternalCacheDir()和getExternalCacheDirs()获取,后者调用之后自动生成该目录
2.2 Android/obb/package_name/
obb目录也可能不存在
该目录的的相关函数简单只有两个:getObbDirs()和getObbDir(),前者调用之后会自动生成该目录,该目录一般是游戏的数据包目录
3. SD卡自定义的文件目录
除了上边两个目录之外,当然还能在SD卡下自定义目录,一般用来永久存储,卸载应用之后不会删除。
相关函数如下:
//这个函数用来获取SD卡的挂载状态
//如果传入参数path则是获取该路径的的挂载状态
//如果这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,状态的返回是不一样的
Environment.getExternalStorageState();
//该函数用来返回SD卡的根目录 即/storage/emulated/0/
//注意不要在根目录下创建文件,一定要创建一个子目录去操作,要不然会污染SD卡的主目录
//该目录所有应用都可操作,为共享目录
Environment.getExternalStorageDirectory()
//该函数用来返回SD卡下面的下载缓存目录
Environment.getDownloadCacheDirectory()
//该函数用来获取用户的数据目录
Environment.getDataDirectory()
//函数用来根据类型返回相关目录,类型为Environment的一些变量
//传入的类型参数不能是null,返回的目录路径有可能不存在,所以必须在使用之前确认一下,没有就创建该目录
Environment.getExternalStoragePublicDirectory(String type)
//该函数用来返回根System目录,只挂载为只读
Environment.getRootDirectory()
SD卡自定义的文件目录的操作看Android存储技术初级篇的4.SD卡存储
附录:getXXX函数们的区别
图片来自Android文件存储路径getFilesDir()与getExternalFilesDir的区别
Context.getExternalFilesDir()一般放一些长时间保存的数据
Context.getExternalCacheDir()一般存放临时缓存数据
设置->应用->应用详情里面的”清除数据“与”清除缓存“选项分别对应的是data/data/<application package>/和data/data/<application package>/cache