问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android存储文件路径详解

创作时间:
作者:
@小白创作中心

Android存储文件路径详解

引用
CSDN
1.
https://blog.csdn.net/ChinaDragon10/article/details/138772906

在Android开发中,正确理解和使用存储路径对于开发高质量的应用程序至关重要。本文将详细介绍Android系统中的内部存储和外部存储的区别,并通过代码示例展示如何获取不同存储路径。

一、Android存储简介

Android系统分为内部存储和外部存储。从Android 6.0开始,系统不断更新存储(读写)权限管理机制,除了在AndroidManifest.xml文件中声明权限,应用在运行时也需要动态申请使用对应的权限。

提醒:应用私有存储不需要动态申请权限

  1. Context.getFileDir():获取内置存储下的文件目录,可以用来保存不能公开给其他应用的一些敏感数据,如用户个人信息。
  • 路径为:/data/data/应用包名/files/
  1. Context.getCacheDir():获取内置存储下的缓存目录,可以用来保存一些缓存文件,如图片。当内置存储的空间不足时,系统会自动清除这些缓存文件。
  • 路径为:/data/data/应用包名/cache/

外部存储路径的开头:storage/emulated/0
内部存储文件路径的开头:/data/user/0/应用的包名(packageName)

在设备上对应的目录为:/data/data/应用的包名(packageName)

系统的公共存储文件夹

二、存储文件路径

下面是具体的代码实现:

package example.demo.kotlin

import android.os.Bundle
import android.os.Environment
import androidx.appcompat.app.AppCompatActivity
import example.demo.kotlin.utils.LogUtil

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}")
        }

        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}")
        }

        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}")
        }
    }
}

总结

通过上述代码示例,我们可以清晰地看到不同存储路径的获取方式及其对应的路径结构。这对于开发过程中正确管理和使用存储空间非常重要。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号