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

相关文章

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开