码迷,mamicode.com
首页 > 移动开发 > 详细

android应用相关目录的存取方式与函数解析---全

时间:2015-07-29 21:23:24      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:android

android应用基本都需要进行文件的保存工作,以前总是需要的时候从网上随便搜搜,但是没有去做一个总结,今天不能在拖了,来做个总结!

很基础的东西,小白一个,真心希望能帮到大家,错误的地方大家指点一下技术分享

我遇见的文件读取问题一般有这几个:文件保存在哪?以及如何考虑相关函数,目录权限的问题?以及删除应用之后目录是否会随之删除的问题?

一般存储的路径有三种:

比如应用的名字叫做com.android.framework

1.   /data/data/package_name/
该目录是只对应用可见的,而且如果手机没有root,用adb也是看不了这个目录,该目录用来存储和应用周期相关的文件,会随着应用的卸载一起删除掉

/data/data/com.android.framework/shared_prefs/   用来存储SharedPreference

/data/data/com.android.framework/databases/  用来存储数据库DB,相关函数还有getDatabasePath()

/data/data/com.android.framework/app_webview    和    /data/data/package_name/xxxwebviewcachexxx  用来存储应用内置webview所产生的cache和cookies等,该目录由于android版本不同名字和位置也可能不同
/data/data/com.android.framework/lib   用来存储该应用的.so静态库文件
/data/data/com.android.framework/cache   该目录可以使用函数getCacheDir()获取
/data/data/com.android.framework/files     该目录可以使用函数getFilesDir()获取,openFileInput()openFileOutput()函数也是在该目录下操作文件,fileList()函数是用来列出该files目录下的所有文件,deleteFile(String name)用来删除该files目录下的文件
/data/data/com.android.framework/    这个目录下面当然也能够创建子集的目录,使用的方法就是getDir(String name, int mode),参数中的name就是需要在该目录下创建的子目录名字

你如果能够打开应用的该目录,一般会在该目录下看到很多子目录
注:以上函数没有明确指定的都是使用context调用

PS:
还有一个特别奇怪的函数,无意中看见的getCodeCacheDir()函数,该函数的解释为This location is optimal for storing compiled or optimized code generated by your application at runtime,该目录适合在运行时存放应用产生的编译或者优化的代码,但是我调用就报了NoSuchMethodError,忘赐教~~

还有其他的相关函数

getPackageCodePath() = /data/app/com.android.framework-1.apk
getPackageResourcePath() = /data/app/com.android.framework-1.apk


2.   SD卡Android目录下的两个子目录
注:该目录是挂载到SD卡下面的,所以SD不可用时,这两个目录都是无效的,同样和应用周期相关的文件,会随着应用的卸载一起删除掉

注意需要权限   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 (1)Android/data/package_name/  

Android/data/com.android.framework/files/   该目录可用getExternalFilesDir(String type)和getExternalFilesDirs(String type)获取,参数type为子目录名字,null则为根目录,后者调用之后会自动生成该目录

Android/data/com.android.framework/cache/ 该目录可用getExternalCacheDir()和getExternalCacheDirs()获取,后者调用之后自动生成该目录

(2)Android/obb/package_name/ (obb目录也可能不存在),原文:Note if the application does not have any OBB files, this directory may not exist


该目录的的相关函数简单只有两个:
getObbDirs()和getObbDir(),前者调用之后会自动生成该目录,该目录一般是游戏的数据包目录

3.   SD卡下面自定义的一个文件目录

除了上边两个目录之外,当然还能在SD卡下自定义目录,一般用来永久存储,卸载应用之后不会删除,相关函数如下

Environment.getExternalStorageState(),这个函数用来获取SD卡的挂载状态,如果传入参数path则是获取该路径的的挂载状态,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,状态的返回是不一样的
Environment.getExternalStorageDirectory(),该函数用来返回SD卡的根目录,即/storage/emulated/0/,注意不要在根目录下创建文件,强烈建立创建一个子目录去操作,要不然会污染SD卡的主目录,函数中还有一段介绍It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions),该目录所有应用都可操作,为共享目录
Environment.getDownloadCacheDirectory(),该函数用来返回SD卡下面的下载缓存目录
Environment.getDataDirectory(),该函数用来获取用户的数据目录
Environment.getExternalStoragePublicDirectory(String type),该函数用来根据类型返回相关目录,类型为Environment的一些变量,传入的类型参数不能是null,返回的目录路径有可能不存在,所以必须在使用之前确认一下,没有就创建该目录
Environment.getRootDirectory(),该函数用来返回根System目录,只挂载为只读
最后所有目录的代码返回结果测试如下
L.e("getDatabasePath():"+getDatabasePath("student.db"));
L.e("getCacheDir():"+getCacheDir());
L.e("getFilesDir():" + getFilesDir());
String[] strings = fileList();//为空
for (String path : strings){
   L.e("fileList():---" + path);
}
L.e("getDir(\"zhao\"):" + getDir("zhao", MODE_PRIVATE));
//        L.e("getCodeCacheDir():" + getCodeCacheDir()); //java.lang.NoSuchMethodError
L.e("getPackageCodePath():" + getPackageCodePath());
L.e("getPackageResourcePath():" + getPackageResourcePath());
L.e("getExternalFilesDir():" + getExternalFilesDir(null));
File[] paths = getExternalFilesDirs(null);
for (File path : paths){
    L.e("getExternalFilesDirs():---" + path.getPath());
}
L.e("getExternalCacheDir():" + getExternalCacheDir());
paths = getExternalCacheDirs();
for (File path : paths){
   L.e("getExternalCacheDirs():---" + path.getPath());
}
paths = getObbDirs();
for (File path : paths){
    L.e("getObbDirs():---" + path.getPath());
}
L.e("Environment.getExternalStorageState():"+ Environment.getExternalStorageState());
L.e("Environment.getExternalStorageDirectory():"+Environment.getExternalStorageDirectory());
L.e("Environment.getDownloadCacheDirectory():"+Environment.getDownloadCacheDirectory());
L.e("Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC):"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));
L.e("Environment.getRootDirectory():"+Environment.getRootDirectory());


E/com.android.framework﹕ getDatabasePath():/data/data/com.android.framework/databases/student.db
E/com.android.framework﹕ getCacheDir():/data/data/com.android.framework/cache
E/com.android.framework﹕ getFilesDir():/data/data/com.android.framework/files
E/com.android.framework﹕ getDir("zhao"):/data/data/com.android.framework/app_zhao
E/com.android.framework﹕ getPackageCodePath():/data/app/com.android.framework-1.apk
E/com.android.framework﹕ getPackageResourcePath():/data/app/com.android.framework-1.apk
E/com.android.framework﹕ getExternalFilesDir():/storage/emulated/0/Android/data/com.android.framework/files
E/com.android.framework﹕ getExternalFilesDirs():---/storage/emulated/0/Android/data/com.android.framework/files
E/com.android.framework﹕ getExternalCacheDir():/storage/emulated/0/Android/data/com.android.framework/cache
E/com.android.framework﹕ getExternalCacheDirs():---/storage/emulated/0/Android/data/com.android.framework/cache
E/com.android.framework﹕ getObbDirs():---/storage/emulated/0/Android/obb/com.android.framework
E/com.android.framework﹕ Environment.getExternalStorageState():mounted
E/com.android.framework﹕ Environment.getExternalStorageDirectory():/storage/emulated/0
E/com.android.framework﹕ Environment.getDownloadCacheDirectory():/cache
E/com.android.framework﹕ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC):/storage/emulated/0/Music
E/com.android.framework﹕ Environment.getRootDirectory():/system


                                                                                                                                                                                                                                                             

版权声明:本文为博主原创文章,未经博主允许不得转载。

android应用相关目录的存取方式与函数解析---全

标签:android

原文地址:http://blog.csdn.net/self_study/article/details/47128773

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!