android访问存储目录的API主要分两类,
一类是Environment类;
一类是Context类。
一.EnviranmentAPI访问的目录
Enviranment访问的是直接与手机相关的目录
image
1. API
Environment.getRootDirectory();// /system
Environment.getDataDirectory();// /data
Environment.getDownloadCacheDirectory();// /cache
Environment.getExternalStorageDirectory();// /storage/emulated/0
Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC);// /storage/emulated/0/Music
2. 注意点
2.1 Environment.getExternalStorageDirectory()
- 获取到的目录是主要的外部存储目录,通常"文件浏览器"展示的根目录就是该目录。
- 访问该目录前使用getExternalStorageState()先获取其状态,状态等于Environment.MEDIA_MOUNTED才是可以访问。
2.2 Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC);
获取外部存储目录下存放某一类型文件的目录,该目录可能为空,所以要判断为是否为空,如果为空则创建。
二.ContextAPI访问的目录
Context访问的目录是直接与应用相关的目录
1. 应用的外部存储目录
imagecontext.getExternalFilesDir(DIRECTORY_MOVIES)// /storage/emulated/0/Android/data/包名/files/Movies
context.getExternalCacheDir();// /storage/emulated/0/Android/data/包名/cache
1.1 注意
context.getExternalFilesDir(DIRECTORY_MOVIES)与Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC)类似,先要判断其文件是否存在
2.应用的内部存储目录
imagecontext.getFilesDir()// /data/user/0/包名/files
context.getCacheDir()// /data/user/0/包名/cache
三.注意
- 不同的手机器获取的具体路径可能不一样有的,
比如Environment.getExternalStorageDirectory()可能是/storage/emulated/0,也可能是/storage/sdcard。(本文中的具体路径来自于华为meta9) - 获取外部存储目录都要使用getExternalStorageState()判断其状态是否可用。
- 读写文件需要申请读写权限。如果targetSDK>=23,则必须动态申请权限,如果在AndroidManifest中申请读写权限是没有用的。简单点的方法就是将argetSDK降至23以下。
网友评论