最长用到的就这三个位置

  • /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 各个存储路径及获取方法总结的更多相关文章

  1. 转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别

    作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard = Environment.getExternalStorageDirectory(); 获取S ...

  2. Android数据存储的五种方法汇总

    本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 ...

  3. Android数据存储的5种方法

    --使用SharedPreferences存储数据 --文件存储数据 --SQLite数据库存储数据 --使用ContentProvider存储数据 --网络存储数据 Preference,File, ...

  4. Docker 修改默认存储路径的一个方法

    1. 前期安装创建centOS的虚拟机时发现自己对linux的挂载点不清楚, 造成挂载点的分配不太均匀,如图: root / 节点的大小设置的比较小 /home路径设置的一直比较大 但是docker ...

  5. Jupyter notebook文件默认存储路径以及更改方法

    1.文件默认存储路径怎么查?  安装Anaconda后,新建文件的默认存储路径一般在C系统盘,那么路径是什么呢? 首先,新建一个.ipynb文件, 输入以下脚本,运行出的结果即是当前jupyter文件 ...

  6. Android手机自带内部存储路径的获取 (转)

    转自:http://my.oschina.net/liucundong/blog/288183 我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro ...

  7. Android 项目中的资源获取方法

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  8. web工程常用路径的获取方法

    此文章是基于 搭建SpringMVC+Spring+Hibernate平台 一. 利用 Spring 取得web工程根路径 1. web.xml 中添加如下: <context-param> ...

  9. laravel各种路径的获取方法

    若Route中有Route::get('home/test', 'HomeController@index')->name('test'); ①视图中的href跳转 一.<a href=& ...

随机推荐

  1. django使用mysql出现警告Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release

    django使用mysql出现警告 Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY ...

  2. Java:JSON和Map相互转换

    Java:JSON与Map相互转换 需要jar包:jackson-core-2.6.0.jar,jackson-databind-2.6.0.jar,jackson-annotations-2.6.0 ...

  3. python 3环境下,离线安装模块(modules)

    说明: 需要在环境中安装python的模块,但是无法联网,就通过在Pypi上下载离线模块的包进行安装 安装过程: 1.下载模块,如PyMySQL-0.9.3.tar.gz,下载地址:https://f ...

  4. 用python批量下载图片

    一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...

  5. 使用Python读写文件进行图片复制(文件复制)

    发现Python在读二进制文件时,可以生成一个新的文件,操作还很简单,如下:对一个jpeg的文件进行复制 fp1=open("e:\\1.jpeg","rb") ...

  6. 图片转化base64格式

    public function Base64EncodeImage($ImageFile) { // 图片转化base64格式 , 图片需要在本地,有访问权限 , 相对于项目路径 if(file_ex ...

  7. 【ML基础】皮尔森相关系数(Pearson correlation coefficient)

    前言 参考 1. 皮尔森相关系数(Pearson correlation coefficient): 完

  8. ng2 空标签

    <ng-container *ngIf="v.products"> <li class="clearfix" *ngFor="let ...

  9. Centos7根据yum源安装指定版本docker

    yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mi ...

  10. Is the docker daemon running?

    原文 刚在新的Centos上安装Docker-CE,后运行docker run hello-world报错Cannot connect to the Docker daemon at unix:/// ...