• 简介

  •   Android设备,有3个地方的文件存储位置,他们分别是:
  •   内部存储空间(用户无法浏览到此目录)
  •   外部存储空间(就是手机自身的文件管理目录,用户可以浏览)
  •   SD卡的存储空间(需要插入T卡)
  •   SharedPreferences目录
  •   存储数据库DB目录

  

内部存储空间

  内部存储空间的获取都需要使用Context.

  方法

  getFilesDir(); 

    对应内部存储的路径为: data/data/packagename/files

String filesDir = getApplicationContext().getFilesDir().getPath(); 

  getCacheDir();

    对应内部存储的路径为:data/data/packagename/cache ,cache是缓存的意思,这些文件一旦设备内部存储空间不足时,这些保存在cache下的文件会删除,不要指望系统为你删除,一般需要自己设定阈值,一旦系统满时,系统也会删掉cache!----  一般聊天记录都会使用

String cacheDir = getApplicationContext().getCacheDir().getPath();

  处理文件方法

  openFileInput();和openFileOutput();

  这2个方法对data/data/packagename/files目录下操作文件

  fileList();

  方法是用来列出该data/data/packagename/files目录下的所有文件

  deleteFile(String name);

  用来删除该files目录下的文件

外部存储空间

  外部存储空间有2种不同目录的文件路径,他们分别需要使用Context和Environment来获取,下面我们逐个介绍获取方式与对应路径

  需要使用Context获取方法

  使用上下文获取的路径主要是/android/data/你的包名/      此目录下的路径

  getExternalCacheDir();

    对应外部存储路径:/storage/emulated/0/Android/data/packagename/cache  此方法为获取cache缓存文件

String externalCacheDir = getApplicationContext().getExternalCacheDir().getPath();

  getExternalCacheDirs();

    对应外部存储路径:/storage/emulated/0/Android/data/packagename/cache  此方法为获取cache下所以文件数组集合

File[] externalCacheDirs = getApplicationContext().getExternalCacheDirs();

  getExternalFilesDir(String type);

    对应外部存储路径:/storage/emulated/0/Android/data/packagename/files    此方法获取files文件下的指定文件,这里的参数可以传入null也可以传入一个文件名

String externalFilesDir = getApplicationContext().getExternalFilesDir(null).getPath();

  getExternalFilesDirs(String type);

    对应外部存储路径:/storage/emulated/0/Android/data/packagename/files  此方法获取files文件指定目录的文件数组集合,这里的参数可以传入null也可以传入一个文件名

File[] externalFilesDirs = getApplicationContext().getExternalFilesDirs(null);

  getExternalMediaDirs();

    对应外部存储路径:/storage/emulated/0/Android/media/packagename  此方法获取包名路径下的文件数组集合

File[] externalMediaDirs = getApplicationContext().getExternalMediaDirs();

  需要使用Environment获取方法

  getExternalStorageState();

    获取sd卡状态,此方法返回的是String类型,一共有以下几种类型:

  • MEDIA_UNKNOWN   SD卡未知
  • MEDIA_REMOVED    SD卡移除
  • MEDIA_UNMOUNTED  SD卡未安装
  • MEDIA_CHECKING   SD卡检查中,刚装上SD卡时
  • MEDIA_NOFS            SD卡为空白或正在使用不受支持的文件系统
  • MEDIA_MOUNTED   SD卡安装
  • MEDIA_MOUNTED_READ_ONLY  SD卡安装但是只读
  • MEDIA_SHARED   SD卡共享
  • MEDIA_BAD_REMOVAL  SD卡移除错误
  • MEDIA_UNMOUNTABLE  存在SD卡但是不能挂载,例如发生在介质损坏
     String externalStorageState = Environment.getExternalStorageState();
if (externalStorageState.equals(Environment.MEDIA_MOUNTED)){
//sd卡已经安装
}

  getExternalStorageDirectory();

    对应外部存储路径:/storage/emulated/0  此方法获取外部存储根目录路径

String externalStorageDirectory = Environment.getExternalStorageDirectory().getPath();

  getExternalStoragePublicDirectory(String type);

    获取外部存储的共享文件夹路径(就是拍照文件夹/下载文件夹/音乐文件夹这些系统的共享文件夹),使用的时候参数必需携带路径类型,且不能为null.

    以相机DCIM目录为例子对应获取的路径为:/storage/emulated/0/DCIM

        String externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath();
  • DIRECTORY_MUSIC  音乐目录
  • DIRECTORY_PODCASTS  播客目录
  • DIRECTORY_RINGTONES  铃声目录
  • DIRECTORY_ALARMS   警报(闹钟/定时器)铃声目录
  • DIRECTORY_NOTIFICATIONS  提示音目录
  • DIRECTORY_PICTURES  图片目录
  • DIRECTORY_MOVIES  电影目录
  • DIRECTORY_DOWNLOADS  下载目录
  • DIRECTORY_DCIM   相机拍照或录像文件的存储目录
  • DIRECTORY_DOCUMENTS   文件文档目录

系统存储空间

  getRootDirectory();

    对应获取系统分区根路径:/system  此方法是获取系统根目录路径,返回包含核心Android操作系统的“系统”分区的根目录,始终以只读方式显示和安装。

String rootDirectory = Environment.getRootDirectory().getPath();

  getDataDirectory();

    对应获取用户数据目录路径:/data  返回用户数据目录

String dataDirectory = Environment.getDataDirectory().getPath();

  getDownloadCacheDirectory();

    对应获取用户缓存目录路径:/data/cache  返回下载/缓存内容目录

String downloadCacheDirectory = Environment.getDownloadCacheDirectory().getPath();

Android 开发 存储目录的详解的更多相关文章

  1. Android开发:程序目录结构详解

    HelloWorld程序的目录结构概述 我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidM ...

  2. Android开发——事件分发机制详解

    0. 前言   转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...

  3. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

  4. Android开发 ExpandableListView 可折叠列表详解

    前言 在需要实现一个List的item需要包含列表的时候,我们就可以选择ExpandableListView. 其实这个View的原始设计还是ListView的那套.就是增加2层的ListView而已 ...

  5. Android源码目录结构详解(转载)

    转自:http://blog.csdn.net/xiangjai/article/details/9012387 在学习Android的过程中,学习写应用还好,一开始不用管太多代码,直接调用函数就可以 ...

  6. 最全的Android源码目录结构详解

    Android 2.1|-- Makefile|-- bionic                        (bionic C库)|-- bootable                (启动引 ...

  7. 最全的Android源码目录结构详解(转)

     Android 2.1|-- Makefile|-- bionic                        (bionic C库)|-- bootable                (启动 ...

  8. 最全的Android源码目录结构详解【转】

    本文转载自:http://blog.csdn.net/yangwen123/article/details/8055025 Android 2.1|-- Makefile|-- bionic     ...

  9. Android源码目录结构详解

    Android 4.0|-- Makefile|-- bionic (bionic C库)|-- bootable (启动引导相关代码)|-- build (存放系统编译规则及generic等基础开发 ...

随机推荐

  1. java中字符串"1999-10-01T00:00:00+08: 00" 转化为Date格式

    String oldStr = "1999-10-01T00:00:00+08: 00": SimpleDateFORMAT sdf = new SimpleDateFORMAT ...

  2. 利用树莓派来安装opencv从而来调动摄像头工作(没有坑,超超自己试过)

    超超最近参加了学校里一位特别厉害的老师讲的课(两天,我就从一个小白然后了解了树莓派以及Arduino这些我之前都没有了解过的东西,由于结课的需要,我们需要自己设计一个创意以及完成作品)所以才有了这篇文 ...

  3. js练习

    /** * Created by bianxiaoling on 2018/9/7. */ // 获取 url 中的参数 // 1. 指定参数名称,返回该参数的值 或者 空字符串 // 2. 不指定参 ...

  4. Echart横坐标时间轴滑动

    主要针对于dataZoom的使用,代码如下: option = { title: { text: '未来一周气温变化', subtext: '纯属虚构' }, tooltip: { trigger: ...

  5. 详解Vue 非父子组件通信方法(非Vuex)

    假设 bb 组件里面有个按钮,点击按钮,把 123 传递给 aa 组件 // 根组件(this.$root) new Vue({ el: '#app', router, render: h => ...

  6. 一个简单的例子了解states

    在大规模的配置管理工作中,我们要编写大量的states.sls文件.top.sls是states系统的入口文件,它负责指定哪些设备调用哪些states.sls文件.statse的默认工作目录是在/sr ...

  7. C++ 状态机接口

    最近的状态极差,甚至代码也写不下去了.给自己手臂上的两刀没有任何的作用,看来早已经是麻痹了. 一直想弄一个勉强能用的状态机,用于在各种涉及到状态转换的时候用到,然而脑子并不是太清醒. 先放在这里一个接 ...

  8. The Best Books on Game Dev

    https://www.goodreads.com/list/show/99288.The_Best_Books_on_Game_Dev

  9. JS ajax请求参数格式( formData 、serialize)

    $("#importBtn").click(function(){ if($("#conId").val() == ""){ alert(& ...

  10. QCAD 修改默认的线宽

    QCAD 修改默认的线宽 默认的宽度实在是太宽了,把一些细节给掩盖了. 可以按以下方法找到修改默认宽度. 在 Layer -> Edit Layer 中. 最开始找了好久好久. 最开始在这里找了 ...