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

2024-04-02 20:08

本文主要是介绍android应用相关目录的存取方式与函数解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://www.2cto.com/kf/201507/425853.html

一般存储的路径有三种:

比如应用的名字叫做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不可用时,这两个目录都是无效的,同样和应用周期相关的文件,会随着应用的卸载一起删除掉

注意需要权限

(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卡下自定义目录,一般用来永久存储,卸载应用之后不会删除,相关函数如下

 

?
1
<strong>Environment.getExternalStorageState()</strong>,这个函数用来获取SD卡的挂载状态,如果传入参数path则是获取该路径的的挂载状态,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,状态的返回是不一样的
?
1
<strong>Environment.getExternalStorageDirectory()</strong>,该函数用来返回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),该目录所有应用都可操作,为共享目录
?
1
?
1
<strong>Environment.getDownloadCacheDirectory()</strong>,该函数用来返回SD卡下面的下载缓存目录
?
1
?
1
<strong>Environment.getDataDirectory()</strong>,该函数用来获取用户的数据目录
?
1
?
1
<strong>Environment.getExternalStoragePublicDirectory(String type)</strong>,该函数用来根据类型返回相关目录,类型为Environment的一些变量,传入的类型参数不能是 null ,返回的目录路径有可能不存在,所以必须在使用之前确认一下,没有就创建该目录
?
1
<strong>Environment.getRootDirectory()</strong>,该函数用来返回根System目录,只挂载为只读
最后所有目录的代码返回结果测试如下
?
1
?
1
?
1
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());


?
1
?
1
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应用相关目录的存取方式与函数解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870937

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指