❶ android存储及路径
分为:内部存储和外部存储
如何区分内部存储和外部存储:可以从物理和逻辑区分
从物理的角度区分,内部存储就是手机自带存储空间,外部存储就是外部接入的存储空间例如SD卡
从逻辑意义上区分,data,system 目录就是手机的内部存储,而 mnt 或者 storage目录下的sdcard0指向的sdcard目录就是外部存储。如果是手机自带的外部存储被称为机身外部存储,外置的SD卡则称之为外部存储。当然两者都称为外部存储也没关系。这里描述的内部存储和机身外部存储都属于机身存储;
逻辑区分是从4.4以上版本开始的;
获取内部存储路径和api对应关系
1,通过Environment
2,通过上下文Context
Build.VERSION_CODES.LOLLIPOP及以上版本新增的API
Build.VERSION_CODES.N及以上版本新增的API
特点:
1、内部存储路径中的文件是分类存储的,我们无法干涉,除了cache目录,别的目录系统不会自动创建
2、除了files目录,别的目录我们几乎都是无法手动操作的
3、别的App几乎无法访问内部存储中的数据,除了用非法手段或者我们主动暴露
4、内部存储目录下的文件夹及文件会随着app的卸载而被系统自动删除
外部存储又可分为共有目录和私有目录;
私有目录
私有目录:不需要访问权限
Android 在外部存储空间中也提供了特殊目录供App存放私有文件,该路径为:/storage/emulated/0/Android/data/包名/
注意:应用安装之后/storage/emulated/0/Android/data/是没有对应的应用文件夹的,需要手动调用对应的API创建;
获取私有目录路径
共有目录
共有目录:需要申请权限才能访问
权限:6.0以上需要动态申请
获取共有目录的API 29中已过时:
❷ android 几个路径的获取
String appPath = getApplicationContext().getPackageResourcePath();
/data/app/com.younghare.lepusService-2/base.apk
getApplicationContext().getFilesDir()
getApplicationContext().getFilesDir().getParent()
其实就是/data/data/包(这是沙盒其他app无法访问)
String dataAppPath = getApplicationContext().getFilesDir().getParent();
new File(dataAppPath+"/databases/task.db").exists();//返回是true
抽象路径名的绝对路径名字符串
String appAbsolute = getApplicationContext().getFilesDir().getAbsolutePath()
/data/user/0/com.younghare.lepusService/files
获取CachDir
getApplicationContext().getCacheDir()
通过Context.getExternalCacheDir()方法可以获取到 SDCard/ android /data/你的应用包名/cache/目录,一般存放临时缓存数据
getApplicationContext().getExternalCacheDir()
/storage/emulated/0/Android/data/com.younghare.lepusService/cache
getExternalFilesDir(null)参数传入的为null,这样默认访问的是files文件夹,我们可以指定子文件夹
❸ 安卓11无法访问data文件限制
因谷歌权限限制原因,将Android/data目录进行了隐藏,第三方应用无法访问,所以通过文件管理不能查看该目录下的文件。后期我们会推出新的文件管理版本,升级后访问这个目录时,会跳转到谷歌原生文件管理界面查看其中内容,请后续留意文件管理版本升级提醒。
❹ OPPO手机三方应用文件存储路径
三方应用在“文件管理”APP文件存储路径:
1、打开“文件管理”APP。
(1)图片、视频、音频、文档、安装包、压缩包有单独的入口,可进入查看有无对应文件。
(2)目前微信、QQ有专门的入口,可点击进入查看。
(3)若都无显示,可点击进入手机存储查看。
2、注意事项:
Android 11系统进入““文件管理”APP > 手机存储 > Android > data”目录下无显示,但可通过页面“点击查看”进一步查看,需要重新进入Android/data目录,点击右上角可更换显示方式,能够看到文件完整的名称。
部分三方应用的文件存储路径如下:
序号
应用名称 存储路径
1
微信 照片和视频:““文件管理”APP > 手机存储 > Pictures > Weixin”。
文档:““文件管理”APP > 手机存储 > Android > data > com.tencent.(mm) > (MicroMsg) > (Download)”。
2
QQ 照片、视频(手动下载时):““文件管理”APP > 手机存储 > Tencent > QQ_lmages”和““文件管理”APP > 手机存储 > Pictures > QQ”。
文档、视频(非手动下载时):““文件管理”APP > 手机存储 > Android > data > com.tencent.mobileqq > Tencent > QQfile_recv”。
3
QQ浏览器 ““文件管理”APP > 手机存储 > QQBrowser”。
4
迅雷 ““文件管理”APP > 手机存储 > Android > data > com.xunlei.downloadprovider > files > ThunderDownload”。
5
腾讯视频 ““文件管理”APP > 手机存储 > Android > data > com.tencent.qqlive > files > video_xxx”。(腾讯视频做过相关处理,无法直接播放。)
6
爱奇艺视频 ““文件管理”APP > 手机存储 > Android > data > com.qiyi.video > files > app > download > video > qsv后缀(MB/GB为单位的文件)”。(爱奇艺做过相关处理,无法直接播放。)
7
抖音 已下载视频保存在相册:““文件管理”APP > 手机存储 > DCIM > Camera”。
8
快手 已下载视频保存在相册:““文件管理”APP > 手机存储 > DCIM > Camera”。
9
淘宝 保存的图片:““文件管理”APP > 手机存储 > Pictures > taobao”。
10
唱吧 ““文件管理”APP > 手机存储 > .ktv > song”或““文件管理”APP > 手机存储 > .ktv > record”。
11
全民K歌 ““文件管理”APP > 手机存储 > Android > data > com.tencent.karaoke > files > localsong”。
12
喜马拉雅 进入““喜马拉雅”APP > 右下角我的 > 右上角设置 > 下载和缓存设置 > 下载位置”。
默认:““文件管理”APP > 手机存储 > Android > data > com.ximalaya.ting.android > files > download”。
13
懒人听书 进入““懒人畅听”APP > 右下角账号 > 左上角设置 > 下载设置 > 下载目录设置”。
默认:““文件管理”APP > 手机存储 > tingshu”。
温馨提示:
① 若您提及应用不在以上范围,可自行搜索存储路径。
② 若您手动点击保存文件,该文件会存储在系统目录下(比如使用微信、QQ时,手动保存图片或视频,会存储在/Pictures目录下);其他类似缓存或三方应用自发行为,文件会存储在/Android/data目录下。
❺ 为什么将视频老是喜欢下载到Android/data目录下,搞得我一卸载应用,视频就没了
这是安卓系统结构决定的。
“Android/data”是应用默认的数据文件路径,类似的还有
“Android/obb”一般使用P2P协议的应用会以这个路径作为默认路径
还有的应用是以图片的方式(实际上是多媒体视频)保存在“DCIM”文件夹下的
甚至是以应用的【部分包名】作为保存路径
这是由开发者自行决定的
❻ 安卓data/data/在哪里
data/data目录在手机自带存储中,是系统目录。安卓的data/data是所有程序存储数据的地方
代码中,可以通过Environment.getDataDirectory().getPath()方式获取到data目录。
❼ Android 文件存储-将数据保存在data目录下
在平常使用Android手机的时候,我们都知道,几乎每一个app都在/data/data/<相应的包名>的文件夹下保存数据。那这些数据怎么进行保存的呢?在这里,将简单的介绍一下。
Context类中有一个openFileOutPut方法,这个方法可以将我们的数据保存在data目录下的文件里面。
openFileOutput(String name, int mode)方法中带两个参数,第一个参数是文件名,这里只能写文件的名字,不能包含路径,因为所有的数据都保存在/data/data/<应用包名>/files/目录下;第二个参数是文件的操作模式,有MDOE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。
其中MODE_PRIVATE模式的是默认的操作模式,每一次写入的内容时,都会覆盖前面的内容;MODE_APPEND模式表示的是每次写入的内容追加在前面的后面;MODE_WORLD_READABLE表示的是其他应用程序可以对该文件进行写的操作;MODE_WORLD_WRITEABLE表示的是其他应用程序可以对该文件进行读的操作。不过在后面的两种模式过于危险,google已经在Android 4.2中废弃了。
openFileOutput()方法返回的是一个FileOutPutStream的对象,得到了这个对象,就可以使用Java的IO流来对文件的使用了。
点击保存过后,就会把我们的数据保存在data目录下。
如果我们想要查看的话,就可以在Android studio(我是2.3.2的版本)中找到Tools->Android->Android Device Monitor
再打开/data/data/<应用包名>/files/,发现有一个文件,就是我们之前创建的一个文件。
我们可以点击右上角的图标进行相应的导出工作,对相应的文件进行导出操作。
在Context类中,与openFileOutput方法对应的是openFileInput方法,用户从data目录读取相应的数据。这个方法相较于openFileOutput方法简单一些。
效果示意图:
❽ android下的data目录在哪个文件夹
在系统根目录的data文件夹/data下面,数据库文件等保存在这里