android访问存储目录

2017-10-30  本文已影响84人  真胖大海

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()

  1. 获取到的目录是主要的外部存储目录,通常"文件浏览器"展示的根目录就是该目录。
  2. 访问该目录前使用getExternalStorageState()先获取其状态,状态等于Environment.MEDIA_MOUNTED才是可以访问。

2.2 Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC);

获取外部存储目录下存放某一类型文件的目录,该目录可能为空,所以要判断为是否为空,如果为空则创建。

二.ContextAPI访问的目录

Context访问的目录是直接与应用相关的目录

1. 应用的外部存储目录

image
context.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.应用的内部存储目录

image
context.getFilesDir()// /data/user/0/包名/files
context.getCacheDir()// /data/user/0/包名/cache

三.注意

  1. 不同的手机器获取的具体路径可能不一样有的,
    比如Environment.getExternalStorageDirectory()可能是/storage/emulated/0,也可能是/storage/sdcard。(本文中的具体路径来自于华为meta9)
  2. 获取外部存储目录都要使用getExternalStorageState()判断其状态是否可用。
  3. 读写文件需要申请读写权限。如果targetSDK>=23,则必须动态申请权限,如果在AndroidManifest中申请读写权限是没有用的。简单点的方法就是将argetSDK降至23以下。

参考文章

上一篇下一篇

猜你喜欢

热点阅读