Android-文件路径问题

内部存储

每个安装的app,系统都会在内部存储空间的data/data目录下以包名为名字自动创建与之对应的文件夹,用于存储SharePreferences和SQLiteDatabase持久化数据。内部存储就是app,自己的存储空间,默认情况下,只能被App自身访问。

Android SDK提供可以获取内部存储空间的目录文件方法:

方法作用备注
getFilesDir()获取内部存储的文件目录
getCacheDir()获取内部存储的缓存目录
getDir()和前两个一样,区别在于文件夹名可以自定,访问权限也可以自定
/**
* @param name就是文件夹名 经过测试 生成的文件夹名 带有app_ 前缀
* @param mode 操作模式。值可以是0或MODE_PRIVATE,MODE_WORLD_READABLE
MODE_WORLD_WRITEABLE,和MODE_APPEND
* @return File对象
*/
public abstract File getDir(String name,int mode)

卸载用户时,系统会删除data/data/包名 文件夹

具体使用方法
使用context调用以上方法

MainActivity.this.getCacheDir();
MainActivity.this.getFilesDir();

外部存储

内部存储的空间实际上非常小,因此不建议将文件存放在内部存储中。因此,android在外部存储空间中也为程序提供了一个特殊目录存放私有文件。

/storage/emulated/0/Android/data/app package name

注意:

  • android 7.0开始,其他app无法通过file://这种形式直接读写该目录下的文件内容,需要通过FileProvider访问

android sdk 提供的针对外部存储的方法

方法作用备注
getExternalFilesDir()获取外部存储的文件目录
getExternalCacheDir()获取外部存储的缓存目录

同样的,卸载软件此目录也会被删除

外部存储的公共目录

如果你不想你的数据在程序卸载的时候被删除,那么就得使用这里的知识点了。

首先记得:使用公共目录一定要申请外部存储访问权限

外部存储空间具有一些默认的公共目录,可以通过Environment类提供的方法传入不同的type参数获取绝对目录。

Enviroment.getExternalStoragePublicDirectory(String type);

Enviroment提供的类型

在这里插入图片描述
具体使用方法

        MainActivity.this.getExternalCacheDir();
        MainActivity.this.getExternalFilesDir("");   
注意

Enviroment.getExternalStoragePublicDirectory() 在api29中被废除了为了提高用户隐私,不推荐直接访问共享/外部存储设备。在android Q中,应用程序将无法再直接访问此方法返回的路径。可以使用其他方式来替代,如访问存储在共享/外部存储内容 Context#getExternalFilesDir(String), MediaStore或Intent#ACTION_OPEN_DOCUMENT。

实例:

 Log.i(TAG, "onCreate: "+this.getExternalFilesDir(Environment.DIRECTORY_MOVIES));

在这里插入图片描述

总结

内外存储说明图

在这里插入图片描述

Context、Enviroment

这两个类都可以获得文件夹路径
但是Context可以获取带有包名的文件夹路径而Enviroment可以获取不带包名的路径

返回值

以上方法返回的File对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值