Android File的详解

本文详细介绍了Android应用程序中的存储机制,包括内部存储与外部存储的区别及使用方法。解释了不同类型的存储目录,如私有和公共目录,并提供了具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   Android的文件存储分为外部存储和内部存储(即External storage 和 internal storage)

我们用AS链接手机,view->Tool windows ->Devices File Explorer 查看手机存储

外部存储:

外部存储分为两种:外部私有存储和外部公开存储

外部私有存储:/storage/emulated/0/Android/data/<包名>/

外部公开存储:/storage/emulated/0下除了"外部私有存储"的剩下的都是外部公开存储

那么电脑如何查看外部存储呢?手机链接电脑,Adb选择文件传输后,电脑手机查看到的文件就是内存存储 /storage/emulated/0 目录下所有的文件

外部私有存储:

我们看上图,发现只要我们android了应用,系统便在报名下创建了两个文件夹,对应这我们的连个方法

Context.getExternalFilesDir()和Context.getExternalCacheDir()

那么他们有什么区别呢?getExternalFilesDir是永久存储的,除非手动删除,getExternalCacheDir当系统内存不足的时候,会删除这里的数据,不是永久的。但是两者在app卸载的时候都会清空。

 //非公开的外部存储,file目录 ,一般用来存储长久的数据,系统不会回收,只有用户手动回收
        //public abstract File getExternalFilesDir(@Nullable String type); type是系统为我们提供了几个
        //规范的文件夹,当然你也可以不采纳:    {@link android.os.Environment#DIRECTORY_MUSIC},
        //     *            {@link android.os.Environment#DIRECTORY_PODCASTS},
        //     *            {@link android.os.Environment#DIRECTORY_RINGTONES},
        //     *            {@link android.os.Environment#DIRECTORY_ALARMS},
        //     *            {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
        //     *            {@link android.os.Environment#DIRECTORY_PICTURES}, or
        //     *            {@link android.os.Environment#DIRECTORY_MOVIES}.
        val externalFilesDir = baseContext.getExternalFilesDir("sujinbiao")
        if (!externalFilesDir!!.exists()){
            externalFilesDir.mkdirs()
        }
        Log.e("SPLOG","externalFilesDir=${externalFilesDir.path}")

        //非公开的外部存储 cache,一般用来保存临时数据,如果系统存储不足的时候,系统会回收这里的数据
        val mExternalCacheDir = baseContext.externalCacheDir
        val mCacheDir = File(mExternalCacheDir, "sujinbiaoTest")
        if (!mCacheDir!!.exists()){
            mCacheDir.mkdirs()
        }
        Log.e("SPLOG","CacheDir=${mCacheDir.path}")

打印结果:

externalFilesDir=/storage/emulated/0/Android/data/包名/files/sujinbiao
CacheDir=/storage/emulated/0/Android/data/包名/cache/sujinbiaoTest

内部存储:

   因为内部存储只有root后才能看下,我们同样按上面的方法,AS链接手机查看。

内存存储在 :data/data/包名

同理,系统也会为我们创建如下几个文件

cache: context.getCacheDir()  系统内存不够的时候,会清除

code_cache : context.getCodeCacheDir()存放运行时代码优化等产生的缓存,一般系统使用

files:context.getFilesDir()  永久保存的,除非手动清除

shared_prefs:系统用于存储SharedPreference的xml文件

一般记得用Context获取的File根路径都是私有目录的。android对单个应用的内部存储有大小限制,各个手机不一样,但是现在这个限制已经很大了,大约5-20G左右

Android内部存储与外部存储(私有目录与公共目录)图文详解

参考文档: http://blog.youkuaiyun.com/fancylovejava/article/details/49490663

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值