android 各个存储路径及获取方法总结
最长用到的就这三个位置
- /data/data/包名/
- /sdcard/Android/data/包名/
- /sdcard/xxx
前两个是应用内部存储, 会随着app的卸载而自动删除, sdcard中其他的文件夹不会自动删除, 除非用户手动删除, 否则会一直存在, 换句话说就是垃圾.
Google官方建议把数据存储在 /sdcard/Android/data/包名/ 下.
路径获取方法
前两个应用内部存储通过 Context 来获取, 第三个作为外部存储是通过 Environment 类来获取. 注释为返回值.
/data/data/包名/
context.getFilesDir(); // /data/data/包名/files
context.getCacheDir(); // /data/data/包名/cache
/sdcard/Android/data/包名/
context.getExternalFilesDir(); // /sdcard/Android/data/包名/files
context.getExternalCacheDir(); // /sdcard/Android/data/包名/cache
/sdcard/xxx
// /storage/emulated/0
Environment.getExternalStorageDirectory();
// /storage/emulated/0/DCIM, 另外还有MOVIE/MUSIC等很多种标准路径
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
注意, 根据源码文档中说明, 获取外部存储时, 有可能会因为各种问题导致获取失败, 建议先使用 getExternalStorageState 来判断外部存储状态, 如果已挂载的话再存储.
在开发过程中,我们会经常需要操作手机的sd卡,在使用前,我们应该先判断sd卡的状态再使用
通过Environment.getExternalStorageState()方法我们可以获得sd卡的状态信息
返回的是一个string类型的状态量。
状态的参数用法如下
| sd卡状态 | 现象描述 | /mnt/sdcard目录存在否 | canWrite()返回 | canRead()返回 | 在/mnt/sdcard创建文件 | 在/mnt/sdcard创建文件夹 |
| MEDIA_MOUNTED | SD卡正常挂载 | 是 | true | true | 可 | 可 |
| MEDIA_REMOVED | sd卡不存在 | 是 | false | false | 不可 | 不可 |
| MEDIA_UNMOUNTED | sd卡存在,系统未挂载 | 是 | false | false | 不可 | 不可 |
| MEDIA_BAD_REMOVAL | sd卡在被挂载前,被暴力直接移除 |
|
false | false | 不可 | 不可 |
| MEDIA_SHARED | 存在sd卡,但未被挂载处于被通过usb共享内存状态中 | 是 | false | false | 不可 | 不可 |
| MEDIA_CHECKING | sd卡处于被检查状态 | 是 | false | false | 不可 | 不可 |
| MEDIA_MOUNTED_READ_ONLY | sd卡为只读状态 | 是 | false | true | 不可 | 不可 |
| MEDIA_NOFS | 1、sd卡存在为空白状态2、系统不支持 | 是 | false | false | 不可 | 不可 |
| MEDIA_UNMOUNTABLE | sd卡不能挂载 | 是 | false | false | 不可 | 不可 |
所需权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
android 各个存储路径及获取方法总结的更多相关文章
- 转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别
作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard = Environment.getExternalStorageDirectory(); 获取S ...
- Android数据存储的五种方法汇总
本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 ...
- Android数据存储的5种方法
--使用SharedPreferences存储数据 --文件存储数据 --SQLite数据库存储数据 --使用ContentProvider存储数据 --网络存储数据 Preference,File, ...
- Docker 修改默认存储路径的一个方法
1. 前期安装创建centOS的虚拟机时发现自己对linux的挂载点不清楚, 造成挂载点的分配不太均匀,如图: root / 节点的大小设置的比较小 /home路径设置的一直比较大 但是docker ...
- Jupyter notebook文件默认存储路径以及更改方法
1.文件默认存储路径怎么查? 安装Anaconda后,新建文件的默认存储路径一般在C系统盘,那么路径是什么呢? 首先,新建一个.ipynb文件, 输入以下脚本,运行出的结果即是当前jupyter文件 ...
- Android手机自带内部存储路径的获取 (转)
转自:http://my.oschina.net/liucundong/blog/288183 我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro ...
- Android 项目中的资源获取方法
Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...
- web工程常用路径的获取方法
此文章是基于 搭建SpringMVC+Spring+Hibernate平台 一. 利用 Spring 取得web工程根路径 1. web.xml 中添加如下: <context-param> ...
- laravel各种路径的获取方法
若Route中有Route::get('home/test', 'HomeController@index')->name('test'); ①视图中的href跳转 一.<a href=& ...
随机推荐
- Centos7下安装ORACLE 11g,弹窗不显示
Centos7下安装ORACLE 11gR2,弹窗不显示,安装界面显示为灰色. 解决方法:执行安装时带上一下参数 ./runInstaller -jreLoc /etc/alternatives/jr ...
- RockBrain USB Server外设虚拟化高可用解决方案(银企直联虚拟化解决方案)
技术指标: 单.双千兆网络界面(支持链路冗余与链路热备.支持双网口均衡负载) 原生USB2.0接口(USB2.0与USB3.0接口均对所有USB版本设备兼容,支持混插) 技术优势: RockBrain ...
- 运维笔记--Ubuntu离线安装jdk1.8(JDK8)Java环境
Ubuntu离线环境安装jdk1.8 系统版本:Ubuntu16.04 其他Ubuntu版本安装类似 Jdk版本:8 1. 下载相应离线软件包 Jdk oracle官方下载地址:https://www ...
- 用selenium自动加载浏览器下载图片
上一篇用requests这个库进行图片的批量下载,只所以可以这样做,是因为豆瓣提供的XHR的接口API,而且接口返回的数据类型为json格式,所以使用起来非常的方便,但是有时候我们需要分析html格式 ...
- Session覆盖测试(要验证码提交到后续页面操作的 绕过去的场景)
测试原理和方法 找回密码逻辑漏洞测试中也会遇到参数不可控的情况,比如要修改的用户名或者绑定 的手机号无法在提交参数时修改,服务端通过读取当前session会话来判断要修改密码的账 号,这种情况下能否对 ...
- 禁用 Ubuntu 18.04 Files 的 Type Ahead search 功能
. . . . . Ubuntu 的文件浏览器(Files)提供了一个搜索的功能,叫做“Type Ahead search”.即我们在文件浏览器中输入某个文件的名字时,Files 并不是将焦点定位在某 ...
- SQL经典实例笔记
目录 前言 第一章:检索记录 在Where字句中使用别名 前言 本文是根据我阅读的书籍SQL经典实例而写的笔记,只记载我觉得有价值的内容 第一章:检索记录 在Where字句中使用别名 --错误实例 s ...
- linux 下mysql 关闭 启动
一. 启动 .使用 service 启动:service mysql start .使用 mysqld 脚本启动:/etc/init.d/mysql start .使用 safe_mysqld 启动: ...
- Node.js实现PC端类微信聊天软件(三)
Github StackChat Redux学习回顾 Redux的主要功能就是管理复杂交错的State,比如需要讲state提升到顶层组件的场景中,使用Redux就很合适 Redux主要提供三个东西来 ...
- kafka高吞吐量的分布式发布订阅的消息队列系统
一:kafka介绍kafka(官网地址:http://kafka.apache.org)是一种高吞吐量的分布式发布订阅的消息队列系统,具有高性能和高吞吐率. 1.1 术语介绍BrokerKafka集群 ...