Android 底层是Linux的内核,所以默认的外部存储还是在mnt/sdcard
外部存储分为公共目录和私有目录,获取方法如下:
外部共有目录
路径名 | 如何得到 |
共有的路径: /mnt/sdcard | 通过Environment.getExternalStorageDirectory得到 |
公共文件夹 音乐文件夹的目录/mnt/sdcard/Music | 通过Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)得到 |
外部私有目录:
路径名 | 如何得到 |
---|---|
路径/mnt/sdcard/Android/data/包名/cache | 通过getExternalCacheDir得到 |
路径/mnt/sdcard/Android/data/包名/files | 通过getExternalFilesDir得到 |
路径/mnt/sdcard/Android/data/包名/files/images | 通过getExternalFilesDir("images")得到 |
通过代码来得到相应的外部存储的位置:
//***************************************外部存储****************************************
Log.d("Kodulf","***************************************外部存储-外部共有目录**************************************** ");
//获取外部存储的文件夹
File directory = Environment.getExternalStorageDirectory();
Log.d("Kodulf","Environment.getExternalStorageDirectory ="+directory.getPath());
//获取外部存储的公共的 音乐文件夹
File externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
Log.d("Kodulf", "Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) =" + externalStoragePublicDirectory.getPath());
Log.d("Kodulf","***************************************外部存储-外部私有目录**************************************** ");
//相当于内部存储的getCacheDir()
File externalCacheDir = getExternalCacheDir();
Log.d("Kodulf", "getExternalCacheDir =" + externalCacheDir.getPath());
//File[] externalCacheDirs = getExternalCacheDirs(); API 19才有的
下面是在3个不同的android 版本中的执行:
注意:因为没有root ,所以在DDMS中第二个和第三个没有显示/storage/emulated/0这个路径
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0:Android 2.3.3 API 10 的 模拟器上面
只有/sdcard 和/mnt/sdcard
而且/sdcard 还是链接到/mnt/sdcard上面的,所以最终存储在/mnt/sdcard中。
D/Kodulf: ***************************************外部存储-外部共有目录****************************************
D/Kodulf: Environment.getExternalStorageDirectory =/mnt/sdcard
D/Kodulf: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) =/mnt/sdcard/Music
D/Kodulf: ***************************************外部存储-外部私有目录****************************************
D/Kodulf: getExternalCacheDir =/mnt/sdcard/Android/data/tech.androidstudio.filedemo/cache
D/Kodulf: getExternalFilesDir =/mnt/sdcard/Android/data/tech.androidstudio.filedemo/files/images
1:Android 4.3 API 18 的三星手机,因为没有外部的存储卡,所以手机自动的模拟出来一个外部的存储。
/sdcard 和/mnt/sdcard 都是链接的/storage/emulated/legacy
包括一个/storage/sdcard0也是链接/storage/emulated/legacy
最终这个/storage/emulated/legacy 链接的是/mnt/shell/emulated/0 这个文件夹。
D/Kodulf: ***************************************外部存储-外部共有目录****************************************
D/Kodulf: Environment.getExternalStorageDirectory =/storage/emulated/0
D/Kodulf: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) =/storage/emulated/0/Music
D/Kodulf: ***************************************外部存储-外部私有目录****************************************
D/Kodulf: getExternalCacheDir =/storage/emulated/0/Android/data/tech.androidstudio.filedemo/cache
D/Kodulf: getExternalFilesDir =/storage/emulated/0/Android/data/tech.androidstudio.filedemo/files/images
2:Android 5.0.2 API 21 的MOTO X手机
和上面的三星手机非常类似,只是有一点区别就是
/storage/emulated/legacy 不再链接/mnt/shell/emulated/0 这个文件夹,但是里面的内容确实是一模一样的
D/Kodulf: ***************************************外部存储-外部共有目录****************************************
D/Kodulf: Environment.getExternalStorageDirectory =/storage/emulated/0
D/Kodulf: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) =/storage/emulated/0/Music
D/Kodulf: ***************************************外部存储-外部私有目录****************************************
D/Kodulf: getExternalCacheDir =/storage/emulated/0/Android/data/tech.androidstudio.filedemo/cache
D/Kodulf: getExternalFilesDir =/storage/emulated/0/Android/data/tech.androidstudio.filedemo/files/images
BTW: Android版本对应API Level