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

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五