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

本文介绍了Android应用如何使用getExternalFilesDir和getExternalCacheDir获取外部存储的私有目录,以及内部存储的特性和获取方法。同时强调了Android6.0后关于外部存储权限的动态管理。最后倡导终身学习和系统化学习的重要性。

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

完整代码如下所示:

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 void operate(View v) {

String path = getExternalFilesDir(null).getAbsolutePath() + “/test.txt”;

Log.e(“ExternalActivityTag”, path);

switch (v.getId()) {

case R.id.save_btn:

File file = getExternalFilesDir(null);

try {

if (!file.exists()) {

file.createNewFile();

}

FileOutputStream fos = new FileOutputStream(path, true);

String str = infoEdt.getText().toString();

fos.write(str.getBytes());

} catch (IOException e) {

e.printStackTrace();

}

break;

case R.id.read_btn:

try {

FileInputStream fis = new FileInputStream(path);

byte[] b = new byte[1024];

int len = fis.read(b);

String str2 = new String(b, 0, len);

txt.setText(str2);

} catch (Exception e) {

e.printStackTrace();

}

break;

}

}

}

打印出来的具体位置如下所示(结合概述所讲内容可以知道这个目录我们可以在映射目录 sdcard 下面找到):

2.5、注意


利用 getExternalFilesDir()getExternalCacheDir() 这两个方法来获取外部存储的私有目录是不需要任何权限的,但是如果用 Environment.getExternalStorageDirectory() 是需要外部存储的读写权限的,而且在 Android 6.0 之后,只在清单文件中声明是不够的,还需要运行时申请,即动态权限。

三、内部存储

====================================================================

3.1、概述


首先,内部存储不是内存。在 Android studio 中,内部存储可以通过 Device File Explorer 找到,文件夹叫做 data,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。

3.2、获取内部存储位置


我们可以通过 getFileDir()getCacheDir() 这两个方法来获取内部存储的目录,它们位于 data/data/包名/files(cache) 下面,我们同样用外部存储的实例来演示一下,只是把数据存到内部存储中,因为实例效果是完全一样的,就不演示了,直接看代码(具体代码写法上跟外部存储有点不一样):

public class InternalActivity extends AppCompatActivity {

private EditText edt;

private TextView txt;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_internal);

edt = findViewById(R.id.editText);

txt = findViewById(R.id.textView);

}

public void operate(View v) {

File file = new File(getFilesDir(), “getFilesDir.txt”);

switch (v.getId()) {

case R.id.save_btn:

try {

if (!file.exists()) {

file.createNewFile();

}

FileOutputStream fos = new FileOutputStream(file);

fos.write(edt.getText().toString().getBytes());

fos.close();

} catch (Exception e) {

}

break;

case R.id.read_btn:

try {

最后

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值