安卓中的几个文件目录函数与路径的对应关系
getFilesDir(); /data/data/com.example.mypackage/files getDir("aaaa", MODE_PRIVATE); /data/data/com.example.mypackage/app_aaaa getCacheDir(); /data/data/com.example.mypackage/cache getExternalCacheDir(); /mnt/sdcard/Android/data/com.example.mypackage/cache Environment.getExternalStorageDirectory(); /mnt/sdcard Environment.getRootDirectory(); /system Environment.getDataDirectory(); /data Environment.getDownloadCacheDirectory(); /cache
说明:
com.example.mypackage是包名;
对于1、2、3、4行代码,如果路径文件夹不存在则自动创建文件夹;
getDir返回的目录都是加app_前缀的;
应用卸载时/data/data/com.example.mypackage目录以及他的子目录都会自动删除,但是/mnt/sdcard/Android/data/com.example.mypackage/以及他的子目录是否自动删除与平台有关,只有当系统版本在Android 4.2 (jelly beans API17)以及之后的版本上且Environment.isExternalStorageEmulated()返回true时才会自动删除;
/mnt/sdcard/Android/data/com.example.mypackage/对于任何有WRITE_EXTERNAL_STORAGE权限的应用来说都是可以读写的。
1、2、3、4行的代码只能创建确定名称或app_前缀的文件夹,这显然是让我们很不爽的,想创建任意名字的文件夹可以使用下面的代码
new File(getFilesDir().getParent()+"/test").mkdir()); /data/data/com.example.mypackage/test new File(getExternalCacheDir().getParent()+"/test").mkdir()); /mnt/sdcard/Android/data/com.example.mypackage/test new File(Environment.getExternalStorageDirectory()+"/test").mkdir()); /mnt/sdcard/test
这里的第三行代码在安卓4.0及以上版本需要android.permission.WRITE_EXTERNAL_STORAGE权限