Android存储文件路径的区别

一、Android存储简介

Android系统分为内部存储和外部存储
从Android6.0开始不断在更新存储权限

外部存储路径的开头:storage/emulated/0
内部存储文件路径的开头:/data/user/0/应用的包名(packageName)
在设备上对应的目录为/data/date/应用的包名(packageName)
在这里插入图片描述
在这里插入图片描述

系统的公共存储文件夹
在这里插入图片描述

二、存储文件路径

在这里插入图片描述
在这里插入图片描述

TestActivity.kt代码

package example.demo.kotlinimport android.os.Bundle
import android.os.Environment
import androidx.appcompat.app.AppCompatActivity
import example.demo.kotlin.utils.LogUtil/**************************************************************************Author: zbl*Time: 2020/1/19 9:24*Name:*Overview:*Usage:************************************************************************/
class TestActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.actvity_test)//getExternalStorageDirectory在安卓10中已弃用, 可以使用getExternalFilesDir 代替val externalStorageDirectory = Environment.getExternalStorageDirectory()val filesDir = this.filesDirval cacheDir = this.cacheDirval externalCacheDir = this.externalCacheDirval externalCacheFilesDirPictures = this.getExternalFilesDir(Environment.DIRECTORY_PICTURES)LogUtil.i("activity 获取缓存文件路径 filesDir : ${filesDir.absolutePath}")LogUtil.i("activity 获取缓存文件路径 cacheDir : ${cacheDir.absolutePath}")externalCacheDir?.let {LogUtil.i("activity 获取缓存文件路径 externalCacheDir : ${it.absolutePath}")}externalCacheFilesDirPictures?.let {LogUtil.i("activity 获取缓存文件路径 externalCacheFilesDirPictures : ${it.absolutePath}")}/*activity 获取缓存文件路径 filesDir : /data/user/0/example.demo.kotlin/filesactivity 获取缓存文件路径 cacheDir : /data/user/0/example.demo.kotlin/cacheactivity 获取缓存文件路径 externalCacheDir : /storage/emulated/0/Android/data/example.demo.kotlin/cacheactivity 获取缓存文件路径 externalCacheFilesDirPictures : /storage/emulated/0/Android/data/example.demo.kotlin/files/Pictures*/val mFilesDir2 = this.application.filesDirval cacheDir2 = this.application.cacheDirval externalCacheDir2 = this.application.externalCacheDirval externalCacheFilesDirPictures2 = this.application.getExternalFilesDir(Environment.DIRECTORY_PICTURES)LogUtil.i("activity.getApplication() 获取缓存文件路径 filesDir2 : ${mFilesDir2.absolutePath}")LogUtil.i("activity.getApplication() 获取缓存文件路径 cacheDir2: ${cacheDir2.absolutePath}")externalCacheDir2?.let {LogUtil.i("activity.getApplication() 获取缓存文件路径 externalCacheDir2 : ${it.absolutePath}")}externalCacheFilesDirPictures2?.let {LogUtil.i("activity.getApplication() 获取缓存文件路径 externalCacheFilesDirPictures2: ${it.absolutePath}")}/*activity.getApplication() 获取缓存文件路径 filesDir2 : /data/user/0/example.demo.kotlin/filesactivity.getApplication() 获取缓存文件路径 cacheDir2: /data/user/0/example.demo.kotlin/cacheactivity.getApplication() 获取缓存文件路径 externalCacheDir2 : /storage/emulated/0/Android/data/example.demo.kotlin/cacheactivity.getApplication() 获取缓存文件路径 externalCacheFilesDirPictures2: /storage/emulated/0/Android/data/example.demo.kotlin/files/Pictures*/val filesDir3 = this.applicationContext.filesDirval cacheDir3 = this.applicationContext.cacheDirval externalCacheDir3 = this.applicationContext.externalCacheDirval externalCacheFilesDirPictures3 = this.applicationContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES)LogUtil.i("activity.getApplicationContext() 获取缓存文件路径 filesDir3 : ${filesDir3.absolutePath}")LogUtil.i("activity.getApplicationContext() 获取缓存文件路径 cacheDir3 : ${cacheDir3.absolutePath}")externalCacheDir3?.let {LogUtil.i("activity.getApplicationContext() 获取缓存文件路径 externalCacheDir3 : ${it.absolutePath}")}externalCacheFilesDirPictures3?.let {LogUtil.i("activity.getApplicationContext() 获取缓存文件路径 externalCacheFilesDirPictures3 : ${it.absolutePath}")}/*activity.getApplicationContext() 获取缓存文件路径 filesDir3 : /data/user/0/example.demo.kotlin/filesactivity.getApplicationContext() 获取缓存文件路径 cacheDir3 : /data/user/0/example.demo.kotlin/cacheactivity.getApplicationContext() 获取缓存文件路径 externalCacheDir3 : /storage/emulated/0/Android/data/example.demo.kotlin/cacheactivity.getApplicationContext() 获取缓存文件路径 externalCacheFilesDirPictures3 : /storage/emulated/0/Android/data/example.demo.kotlin/files/Pictures*/}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux的命名管道 共享内存

目录 命名管道 mkfifo函数 unlink函数 命名管道类 服务端 客户端 共享内存 shmget函数 ftok函数 key和shmid的区别 snprintf函数 ipcs指令 ipcrm指令 shmctl函数 shmat函数 void*做返回值 创建共享内存空间 服务端 客户端 命名管道 基本概念&#xff1…

笔记本黑屏,重新开机主板没有正常运作的解决办法

拆开笔记本后壳,打开看到主板,将主板上的这颗纽扣电池拆下来,如果是带连接线的(如下图),可以将接口处线头拔出,等1分钟再把线接上。 ------------- 以下是科普 首先,电脑主板上的这…

力扣例题(循环队列)

链接 . - 力扣(LeetCode) 描述 思路 我们使用数组来创建循环队列 数组的大小我们就额外对开辟一块空间 MyCircularQueue(k) 开辟一个结构体,存放队列的相关数据 分别为size,数组指针_a,起始位置head,结束位置tail 注意:我们…

移动端自动化测试工具 Appium 之持续集成

文章目录 一、背景二、前置条件三、代码部分1、pom.xml文件配置2、main入口代码 四、Jenkins 部分1、下载Jenkins2、安装插件3、job配置4、选择构建 五、工程目录六、报告示例七、总结 一、背景 持续集成是老生话谈的事情,用的好不好,看自己公司与使用场…

能播放SWF文件的FlashPlayer播放器

问题: 你是不是遇到了 flash 动画 放不了了? 以前的flash游戏玩不了了 在网上很难找到好用的,免费Flashplayer播放器, 找到的也没法保存.exe 以前买的课件放不了了 一打开就更新提示: 再不就是意外能打开了但【创建…

IBM Granite模型开源:推动软件开发领域的革新浪潮

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

高中数学:平面向量-加减运算

一、向量的加法运算 三角形法则(推荐) 两个或多个向量收尾相连的加法运算,用三角形法则 简便算法 首尾相连的多个向量,去掉中间点,就是最终的和。 也可以用三角形法则证明 向量加法交换律 向量加法结合律 平行四…

讲解SSM的xml文件

概述&#xff1a;这些配置文件很烦&#xff0c;建议直接复制粘贴 springMVC.xml文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XM…

【Image captioning】In Defense of Grid Features for Visual Question Answering实现流程

In Defense of Grid Features for Visual Question Answering实现流程 网格特征预训练代码 这是该论文的特征预训练代码发布: @InProceedings{jiang2020defense,title={In Defense of Grid Features for Visual Question Answering},author={Jiang, Huaizu and Misra, Ishan…

霍廷格电源 Tru plasma DC3030 通快DC3040 MF3030

霍廷格电源 Tru plasma DC3030 通快DC3040 MF3030

jdk安装多个版本,但是java -version显示最早安装的版本,换掉Path或者JAVA_HOME不生效问题

问题一&#xff1a;当你的电脑上又多个jdk版本&#xff0c;如17 或者8时&#xff0c;使用命令行 java -version显示最早安装的&#xff0c;如下图所示&#xff1a;环境变量配置的17&#xff0c;但是命令行显示的是8。 原因&#xff1a;windows电脑装jdk17后 会在你的环境变量…

5.14_练习

1、字符串逆序 编写一个函数reverse_string(char* string)(递归实现) 实现&#xff1a;将参数字符串中的字符反向排列&#xff0c;不是逆序打印 要求&#xff1a;不能使用C函数库中的字符串操作函数 比如&#xff1a; char arr[ ]"abcdef"; 逆序之后数组的内容…

全面提升数据采集效率:亮数据产品的应用与评估详解

全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解 文章目录 全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解背景应用场景&#xff1a;平台首页信息抓取准备评测素材详细的产品使用和评测流程产品介绍亮数据的IP代理服务亮数据的爬虫工具及采集技术 注…

云商城系统源码,无后门,一站式系统Java源码

云商城系统&#xff0c;无后门&#xff0c;一站式系统Java源码&#xff0c;心权益商品数量不限数量 系统对接 手动发货 自动发货 兑 换 码 订单监控 商品监控 对象存储 邮箱提醒 加价模板 密价功能 三方支付 会员体系 财务明细 交易分析 售后服务 技术支持 【Java源码】云商…

Dubbo3.x 异步转同步源码

底层netty通信是异步的&#xff0c;那我们平时调用采取的同步是如何将底层的异步转为同步的呢&#xff1f; dubbo远程rpc协议和网络框架有多种&#xff0c;我们以默认的dubbo协议、网络框架netty作为切入点. 注意点&#xff1a;debug时将过期时间设置长一点&#xff1a; 调用…

使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建 5.1静态搭建 在src下创建如图文件夹 这里用logo举例&#xff0c;在scripts里export <script lang"ts">export default {name: Logo,}</script> 然后在layout里引入 //引入左侧菜单顶部用户信息 import Logo from ./logo/index.vue 接…

java版数据结构:堆,大根堆,小根堆

目录 堆的基本概念&#xff1a; 如何将一个二叉树调整成一个大根堆&#xff1a; 转成大根堆的时间复杂度 根堆中的插入&#xff0c;取出数据&#xff1a; 堆的基本概念&#xff1a; 堆是一种特殊的树形数据结构&#xff0c;它满足以下两个性质&#xff1a; 堆是一个完全二叉…

【半夜学习MySQL】表结构的操作(含表的创建、修改、删除操作,及如何查看表结构)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 创建表查看表结构修改表删除表 创建表 语法&#xff1a; create table table_name(field1 datatype,field2 datatype,fiel…

JWT令牌技术实现登录校验

一.简单登录功能 在登录界面中&#xff0c;我们可以输入用户的用户名以及密码&#xff0c;然后点击 "登录" 按钮就要请求服务器&#xff0c;服务端判断用户输入的用户名或者密码是否正确。如果正确&#xff0c;则返回成功结果&#xff0c;跳转至系统首页面。 1.功能…

[笔试训练](二十二)064:添加字符065:数组变换066:装箱问题

目录 064:添加字符 065:数组变换 066:装箱问题 064:添加字符 添加字符_牛客笔试题_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 枚举所有A&#xff0c;B字符串可能的对应位置&#xff0c;得出对应位置不同字符数量的最小情况 两字符串的字符数量差n-m&…