一、app独立文件
不会因为app删除而消失的,有特定目录这些目录都是以DIRECTORY开头的,例如:DIRECTORY_MUSIC , DIRECTORY_PICTURES。
使用方法(1)更加灵活,可以自己指定目录。
File sdCard = Environment.getExternalStorageDirectory();
File directory_pictures = new File(sdCard, "Pictures");
Log.i(TAG,"directory_pictures="+directory_pictures);
使用方法(2)更加方便的访问Android给我们提供好的一些公共目录的方法
File directory_pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
Log.e(TAG, "directory_pictures="+directory_pictures);
结果会是:sdcard/Pictures
二、app专属文件
会随着app卸载而被删除
可以被存储在两个地方:internal storage 和 external storage 。 internal storage就是手机自带的一块存储区域,通常很小;external storage就是通常所说的SD卡,通常很大。
存储在internal storage
存储你的shared preference文件,数据库文件
File filesDir = getFilesDir(); Log.i(TAG,"file_dir="+filesDir);
结果会是:/data/data/< package name >/files/
存储在external storage(需要文件读写权限)
File externalFilesDir = getExternalFilesDir(null);//默认访问的是files文件夹 Log.i(TAG, "externalFileDir = "+externalFilesDir);
结果会是:sdcard/Android/data/< package name >/files/
File externalFilesDir = getExternalFilesDir("Caches"); Log.i(TAG, "externalFileDir = "+externalFilesDir);
结果会是:sdcard/Android/data/< package name >/files/Caches
有些时候我们的手机没有安装SD卡,所以我们使用前需要判断一下:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //SD卡已装入 }
三、获取目录的api详解
getCacheDir: 获取/data/data/包名/cache目录(会随着卸载被删除)
getFilesDir:获取/data/data/包名/files目录(会随着卸载被删除)
getExternalFilesDir:获取SDCard/Android/data/包名/files/ 目录,一般放一些长时间保存的数据 (对应设置里面的清除数据)
getExternalCacheDir:获取SDCard/android/data/包名/cache/目录,一般存放临时缓存数据(对应设置里面的清除缓存)
卸载后,SDCard/Android/data/包名/ 这个目录下的所有文件都会被删除
Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test
Environment.getRootDirectory() = /system
getPackageCodePath() = /data/app/包名.apk
getPackageResourcePath() = /data/app//包名.apk
getCacheDir() = /data/data/包名/cache
getDatabasePath(“test”) = /data/data//包名/databases/test
getDir(“test”, Context.MODE_PRIVATE) = /data/data//包名/app_test
getExternalCacheDir() = /mnt/sdcard/Android/data/包名/cache
getExternalFilesDir(“test”) = /mnt/sdcard/Android/data//包名/files/test
getExternalFilesDir(null) = /mnt/sdcard/Android/data//包名/files
getFilesDir() = /data/data/包名/files