Android 外部存储与内部存储详解

本文详细介绍了Android的外部存储和内部存储。外部存储包括概述、获取位置(SDK 29前后)、私有目录及实例演示,强调了在不同版本中获取外部存储路径的变化。内部存储则涉及其非内存特性、获取位置及其与外部存储的对比。文章建议在内存卡存在时使用外部存储的私有目录,否则选择内部存储。

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

一、前言

Android 本地数据存储之 SharePreferences 存储 中,我们已经讲了 Sp 是如何保存数据的,并且也提供了一个 Sp 的工具类,今天我们来讲解一下 Android 中本地存储数据的另外一种方式——文件存储,文件存储又分为外部存储和内部存储。

二、外部存储

2.1、概述

不一样的手机,外部存储在手机中的位置可能是不一样的,有些手机是在 storage 文件夹下,有些手机是在 mnt 文件夹下,我们通常用来表示外部存储的话,都会找一个叫做 sdcard 的文件夹,在 mnt 下面我们可以直接找到这个文件夹,但是在 storage 下面会首先看到 emulated 的文件夹,然后 emulated 下面还有一个叫做 0 的文件夹,这个 0 的文件夹才是真实的外部存储的目录,通常这个目录是无法打开的,因为在这一类型的设备中间会形成一个映射,而这个映射文件夹的名字就叫做 sdcard,所以这种情况下我们就会直接去找这个 sdcard 文件夹。

2.2、获取外部存储位置(SDK 29 之前)

在 Android SDK 29 之前,想要查看外部存储的真实目录只需要调用 Environment.getExternalStorageDirectory() 就可以了,但是在 Android SDK 29 之后,这个方法就被废弃了,如下所示,在 SDK 为29 的情况下,getExternalStorageDirectory() 这个方法显示的就是被废弃了。

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

2.3、获取外部存储私有目录(SDK 29)

之所以 getExternalStorageDirectory() 这个方法被废弃的原因就是,保存在这个目录下的数据即时应用被卸载了,这些数据依然会存在外部存储里面,而这些数据是很有可能成为垃圾数据的,这样对用户是非常不友好的,所以呢谷歌提供了 getExternalFilesDir() 和 getExternalCacheDir() 这两个方法来获取外部存储的私有目录,前一个存放需要长时间保存的数据,后一个就存一些临时数据,它们位于 SDCard/Android/data/包名/files(cache) 下面。我们用一个简单的例子来演示一下。

2.4、外部存储实例演示

这个例子也很简单,就是往这个目录下存一些数据再读出来,具体效果如下所示:

效果展示
完整代码如下所示:

public class ExternalActivity extends AppCompatActivity {
   

    private EditText infoEdt;
    private TextView txt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_external);

        infoEdt = findViewById(R.id.info_edt);
        txt = findViewById(R.id.textView);
    }

    public
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值