Android存储文件路径的区别

一、Android存储简介

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

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

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

二、存储文件路径

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

TestActivity.kt代码

package example.demo.kotlin

import 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.filesDir
        val cacheDir = this.cacheDir
        val externalCacheDir = this.externalCacheDir
        val 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/files
             activity 获取缓存文件路径 cacheDir : /data/user/0/example.demo.kotlin/cache
             activity 获取缓存文件路径 externalCacheDir : /storage/emulated/0/Android/data/example.demo.kotlin/cache
             activity 获取缓存文件路径 externalCacheFilesDirPictures : /storage/emulated/0/Android/data/example.demo.kotlin/files/Pictures
         */

        val mFilesDir2 = this.application.filesDir
        val cacheDir2 = this.application.cacheDir
        val externalCacheDir2 = this.application.externalCacheDir
        val 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/files
             activity.getApplication() 获取缓存文件路径 cacheDir2: /data/user/0/example.demo.kotlin/cache
             activity.getApplication() 获取缓存文件路径 externalCacheDir2 : /storage/emulated/0/Android/data/example.demo.kotlin/cache
             activity.getApplication() 获取缓存文件路径 externalCacheFilesDirPictures2: /storage/emulated/0/Android/data/example.demo.kotlin/files/Pictures
         */

        val filesDir3 = this.applicationContext.filesDir
        val cacheDir3 = this.applicationContext.cacheDir
        val externalCacheDir3 = this.applicationContext.externalCacheDir
        val 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/files
             activity.getApplicationContext() 获取缓存文件路径 cacheDir3 : /data/user/0/example.demo.kotlin/cache
             activity.getApplicationContext() 获取缓存文件路径 externalCacheDir3 : /storage/emulated/0/Android/data/example.demo.kotlin/cache
             activity.getApplicationContext() 获取缓存文件路径 externalCacheFilesDirPictures3 : /storage/emulated/0/Android/data/example.demo.kotlin/files/Pictures
         */
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode2105. 给植物浇水 II

Every day a Leetcode 题目来源:2105. 给植物浇水 II 解法1:双指针 设 Alice 当前下标为 i,初始化为 0,水量为 a,初始化为 capacityA;Bob 当前下标为 j,初始化为 n-1,水量为 b&am…

flutter开发实战-compute将工作交由isolate处理

flutter开发实战-compute将工作交由isolate处理 最近查看flutter文档时候,看到了compute可以将工作交由isolate处理。通过 Flutter 提供的 compute() 方法将解析和转换的工作移交到一个后台 isolate 中。这个 compute() 函数可以在后台 isolate 中运行复杂的函数并…

string功能介绍(普及版)

目录 1。初始化(好几种方式),npos和string的使用说明 2。string的拷贝,隐式类型转换,[],size,iterator,begin,end,reverse,reverse_iterator&am…

回归预测 | Matlab实现DBO-ESN蜣螂算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab实现DBO-ESN蜣螂算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab实现DBO-ESN蜣螂算法优化回声状态网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现DBO-ESN蜣螂算法优化回声状态网络多输入单输出…

图像融合-下游任务(目标检测、实例分割、深度估计、局部区域细节放大)

下游任务: 采用目标检测、实例分割和深度估计的下游任务来验证图像融合结果质量。 文章目录 下游任务:1.目标检测2.实例分割3.深度估计局部细节放大工具Update1.目标检测 YOLOv8:https://github.com/ultralytics/ultralytics 步骤内容第一步下载项目到本地第二步安装READ…

20232810 2023-2024-2 《网络攻防实践》实验九

一、实践内容 1.1 反汇编 1.1.1 编程原理 编程的原理是一套指导软件开发和维护的概念、原则和实践,包括抽象以简化复杂系统、模块化以分解程序、封装以隐藏内部状态、继承以共享特性、多态以允许不同响应、算法和数据结构以组织计算和存储、控制结构以控制流程、…

Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南

Gateway网关 文章目录 Gateway网关1. 网关基本简介1.1 什么是网关1.2 为什么需要网关? 2. 快速搭建gateway网关2.1 创建新模块2.2 引入依赖2.3 编写启动类2.4 配置路由规则2.5 测试 3. 路由过滤4. 过滤器4.1 简介4.2 网关过滤器4.2.2 种类 4.3 自定义过滤器4.3.1 自…

windows11 Django环境安装

相关文档 1、验证python和pip3环境 C:\Users\Administrator>python Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for…

Linux修改终端命令颜色

1.在家目录中修改.bashrc文件 cd ~ vim .bashrc2.找到PS1相关段落,把其他的注释掉,填上该行代码,修改为自己设置的颜色 (具体颜色查看参考文章) 提供两种颜色,其他的自学调色盘吧(下文有)~ (祝你愉快) ①浅蓝色 深蓝 PS1\[\03…

Ubuntu环境搭建与共享文件

vmtool 然后依次执行以下指令 sudo apt-get update 更新包列表。访问系统的软件仓库源,检查所有已知软件包的最新版本,并更新本地数据库,使得可以安装或升级到最新的软件版本。sudo apt-get upgrade 升级所有已安装的软件包到它们的最新版本。这不包括新安装的软件包,仅限…

6. RedHat认证-基于公钥的认证方式

6. RedHat认证-基于公钥的认证方式 主要学习客户端访问服务端的时候,免密登录这一方式 注意: 免密登录只是基于公钥认证的一个附带属性(基于公钥认证的方式更加安全,防止黑客暴力破解) 第一步:将客户端生成的秘钥传送到服务器 在客户端通过…

基于 Spring Boot 博客系统开发(九)

基于 Spring Boot 博客系统开发(九) 本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(八)&#x1f…

短剧看剧系统,当前互联网热门项目工具系统模板。

目录 揭秘爆款神器:短剧看剧系统,让你的内容火遍全网! 一、短剧看剧系统:一站式解决方案 二、灵活定价,实现收益最大化 三、高效管理,团队协作更轻松 四、数据驱动,精准把握市场动态 五、智…

MM模块学习二 (供应商,物料后台相关配置)

公司代码配置 新建条目(只是建了一个名字出来,后面很多表都是没有得) 接下来定义公司代码: 公司代码复制完成(后续修改交给财务顾问去做) 复制工厂: 复制工厂完成: 修改复制过去的工…

风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码) 完整代码 clc; clear close allX = xlsread(风电场预测.xlsx)

【微记录】Makefile中wildcard(通配)的一种用法--如何避免某个头文件路径不存在造成CLFAGS添加后编译报错?

文章目录 背景方法:wildcard补充信息wildcard解释Make中wildcard用法 背景 工程中,如果某个代码需要再不同平台有不同的依赖头文件,于是会出现不同平台依赖头文件路径不一样,但是为了适配多个平台如何做到避免某个头文件路径不存…

数字集成电路物理设计[陈春章]——知识总结与精炼01

第一章 集成电路物理设计方法 1.1 数字集成电路设计挑战 1.2 数字集成电路设计流程 前两节内容讲述的是数字集成电路发展与流程,知识体系比较宏观和简单,请读者自行了解即可。 1.3 数字集成电路设计收敛 实现设计收敛任务:①数据系统;②优…

tensorflow实现二分类

# 导入所需库和模块 from tensorflow.keras.layers import Dense, Input, Activation # 导入神经网络层和激活函数模块 from tensorflow.keras.models import Sequential # 导入Keras的Sequential模型 import pandas as pd # 导入Pandas库用于数据处理 import numpy as np …

AI网络爬虫:用kimichat自动批量提取网页内容

首先,在网页中按下F12键,查看定位网页元素: 然后在kimi中输入提示词: 你是一个Python编程专家,要完成一个爬取网页内容的Python脚本,具体步骤如下: 在F盘新建一个Excel文件:提示词…

JavaScript异步编程——09-Promise类的方法【万字长文,感谢支持】

Promise 类的方法简介 Promise 的 API 分为两种: Promise 实例的方法(也称为:Promis的实例方法) Promise 类的方法(也称为:Promise的静态方法) 前面几篇文章,讲的都是 Promise 实…