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

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

MYSQL行列转置方式

《MYSQL行列转置方式》本文介绍了如何使用MySQL和Navicat进行列转行操作,首先,创建了一个名为`grade`的表,并插入多条数据,然后,通过修改查询SQL语句,使用`CASE`和`IF`函... 目录mysql行列转置开始列转行之前的准备下面开始步入正题总结MYSQL行列转置环境准备:mysq

Linux(Centos7)安装Mysql/Redis/MinIO方式

《Linux(Centos7)安装Mysql/Redis/MinIO方式》文章总结:介绍了如何安装MySQL和Redis,以及如何配置它们为开机自启,还详细讲解了如何安装MinIO,包括配置Syste... 目录安装mysql安装Redis安装MinIO总结安装Mysql安装Redis搜索Red