Android开发中使用到的文件夹主要分为内置和外置储存空间,这里的内置储存空间和外置储存空间不是指系统储存空间和外置SD卡储存空间。在Android开发过程中一般外置储存空间是指在手机文件管理软件中可以直接看到的储存空间,内置储存空间是指系统及其相关的文件目录在一般的文件管理软件是看不到的,内置储存空间一般是用户没有操作权限的目录。
因为不同的厂商对Android系统进行了修改,所以Android指定功能目录的位置不是绝对的,Android开发中一般使用Context对象或者Environment 中的静态函数获取文件夹的位置。
内置储存特殊文件夹:
1、/data/data/
这个文件夹是应用在系统的位置
/data/data/<package_name>/cache 应用缓存
/data/data/<package_name>/lib 当前应用使用的动态链接库对应abi的软连接
/data/data/<package_name>/files/.. 应用使用到的文件目录
外置储存特殊文件夹:
1、外置储存位置
/storage/emulated/0/ 当前目录是在文件管理器中看到的目录
在根目录有一个软连接/sdcard/
2、外置储存中的Android文件夹
/storage/emulated/0/Android 当前文件是在外置储存空间中,所以文件管理关键中是可以看到的
/storage/emulated/0/Android/cache 默认的外部缓存空间
/storage/emulated/0/Android/data/<package_name> 应用操作的外部储存空间
/storage/emulated/0/Android/data/<package_name>/cache 应用的外部缓存空间
/storage/emulated/0/Android/data/<package_name>/files/.. 应用的外部储存空间中可操作文件夹
3、位置储存中的九大公有目录
九大公有目录是指系统的默认分类文件夹都在外置储存空间。
例如:
/storage/emulated/0/DCIM(相册)
/storage/emulated/0/Download(下载)
/storage/emulated/0/Music(音乐)
....
一、使用Context对象获取目录位置
使用Context对象获取的一般都是相对于当前应用的路径,此类文件夹操作一般不需要动态获取文件读写操作,此类文件在应用卸载后也会被删除。
1)特殊内置文件夹
1、用于获取APP的所在包目录
context.getPackageName()
2、来获得当前应用程序对应的 apk 文件的路径
context.getPackageCodePath()
3、获取该程序的安装包路径
context.getPackageResourcePath()
4、/data/user/0/应用包名/databases/参数名【通过Context.openOrCreateDatabase创建】
context.getDatabasePath()
2)内置储存
1、/data/user/0/应用包名/app_参数名
context.getDir(String name, int mode)
2、/data/data/<application package>/cache目录
context.getCacheDir()
3、/data/data/<package>/files
context.getFilesDir()
context.getFileStreamPath(String name)
context.getCodeCacheDir()
3)外置储存
1、/sdcard/Android/data/<package>/cache
Context.getExternalCacheDir()
2、/mnt/sdcard/Android/obb/<application package> obb目录(游戏数据包)
Context.getObbDir()
3、storage/sdcard/Android/data/包名/files/....
Context.getExternalFilesDir(Environment.DIRECTORY_MUSIC);
二、使用Environment 静态函数获取目录位置
由于不同Android系统厂商的绝对路径不同,所以使用Environment静态函数获取指定文件夹位置
1)特殊外置文件夹
1、获得系统目录/system
Environment.getRootDirectory()
2)内置储存
2、获得根目录/data/data 内部存储路径
Environment.getDataDirectory()
3、获得缓存目录/data/cache
Environment.getDownloadCacheDirectory()
3)外置储存
1、获得SD卡目录/mnt/sdcard
Environment.getExternalStorageDirectory()
2、获取SD卡的状态
Environment.getExternalStorageState();
MEDIA_BAD_REMOVAL 表明SDCard 被卸载前己被移除
MEDIA_CHECKING 表明对象正在磁盘检查。
MEDIA_MOUNTED 表明对象是否存在并具有读/写权限
MEDIA_MOUNTED_READ_ONLY 表明对象权限为只读
MEDIA_NOFS 表明对象为空白或正在使用不受支持的文件系统。
MEDIA_REMOVED 如果不存在 SDCard 返回
MEDIA_SHARED 如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回
MEDIA_UNMOUNTABLE 返回 SDCard 不可被安装 SDCard 是存在但不可以被安装
MEDIA_UNMOUNTED 返回 SDCard 已卸掉如果 SDCard 是存在但是没有被安装
3、获取外部公有目录【九大类】
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
DIRECTORY_ALARMS //警报的铃声
DIRECTORY_DCIM //相机拍摄的图片和视频保存的位置
DIRECTORY_DOWNLOADS //下载文件保存的位置
DIRECTORY_MOVIES //电影保存的位置, 比如 通过google play下载的电影
DIRECTORY_MUSIC //音乐保存的位置
DIRECTORY_NOTIFICATIONS //通知音保存的位置
DIRECTORY_PICTURES //下载的图片保存的位置
DIRECTORY_PODCASTS //用于保存podcast(博客)的音频文件
DIRECTORY_RINGTONES //保存铃声的位置