1.内部存储(Internal Storage)
内部存储会随着应用被卸载而清除。
通过getFilesDir()
和getCacheDir()
可以得到内部文件路径和缓存路径。
/data/data/${package}/files
/data/data/${package}/cache
2.外部存储(External Storage)
外部存储需要权限,但是在4.4(API 19)以上,外部存储中的私有存储不需要权限。
所以如果你只需要用私有存储,可以这样写。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
1.私有存储(卸载应用时会被清除,跟内部存储有点像)
主要方法如下。
getXXXFilesDir(type)
中参数type可以为null
。
getExternalCacheDir();
getExternalFilesDir(null);
/*
*以下的getXXXDirs是同时获取内部存储卡和外部存储卡(SD卡)
*返回值为一个数组
*下面两个方法在API19以上才能用,所以需要用supportV4中的方法
*/
getExternalCacheDirs();
getExternalFilesDirs(null);
//supportV4中的方法
ContextCompat.getExternalFilesDirs(this, null);
ContextCompat.getExternalCacheDirs(this);
通过测试得到的私有缓存路径和私有文件路径如下:
/storage/emulated/0/Android/data/${package}/files
/storage/emulated/0/Android/data/${package}/cache
2.公有存储(卸载应用时不会被清除)
下面的两个方法可以获取外部存储路径。
其中getExternalStoragePublicDirectory(type)
一般用来获取系统的目录,比如Download,DCIM,Music。
参数type不能为null
。
Environment.getExternalStorageDirectory();
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
比如,以下代码在系统的Pictures目录下创建了一个MyPhoto文件夹
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyPhoto");