Android File的路径总结

Environment类大揭秘

Environment有如下8个get方法:

  • Environment.getExternalStorageState();

     该方法用于Returns the current state of the primary "external" storage device.
     
     返回值有以下常量:
     
     `MEDIA_BAD_REMOVAL`     Sd卡被卸载前已经被移除 。Storage state if the media was removed before it was unmounted.
     
     `MEDIA_CHECKING`     Sd卡正在进行磁盘检查。 Storage state if the media is present and being disk-checked.
     
     `MEDIA_EJECTING`     Storage state if the media is in the process of being ejected.
     
     `MEDIA_MOUNTED`     Sd卡存在,且具有读写权限。Storage state if the media is present and mounted at its mount point with read/write access.
     
     `MEDIA_MOUNTED_READ_ONLY`     Sd卡存在,仅具有读权限。Storage state if the media is present and mounted at its mount point with read-only access.
     
     `MEDIA_NOFS`     Sd卡存在,但是空白,或者正在使用不受支持的文件系统。Storage state if the media is present but is blank or is using an unsupported filesystem.
     
     `MEDIA_REMOVED`     Sd卡被移除。Storage state if the media is not present.
     
     `MEDIA_SHARED`     Sd卡未安装,通过USB大容量分享。Storage state if the media is present not mounted, and shared via USB mass storage.
     
     `MEDIA_UNKNOWN`     未知状态。Unknown storage state, such as when a path isn't backed by known storage media.
     
     `MEDIA_UNMOUNTABLE`     Sd卡存在,但不能被安装。Storage state if the media is present but cannot be mounted.
     
     `MEDIA_UNMOUNTED`  Sd卡存在,但未安装。Storage state if the media is present but not mounted. 
    
  • Environment.getExternalStorageState(new File(new URI("123")));

    该方法用于Returns the current state of the storage device that provides the given path.

  • Environment.getStorageState(new File(new URI("123")));
    该方法已过时,用上一个方法代替。

  • Environment.getDataDirectory();

    该方法用于Return the user data directory.返回值为File类型。

  • Environment.getDownloadCacheDirectory();

    该方法用于Return the download/cache content directory.返回值为File类型。

  • 非常重要Environment.getExternalStorageDirectory();

    该方法用于Return the primary external storage directory.返回值为File类型。 当用户将手机和电脑连接在一起,此时存储设备被移除了,或者其他问题,返回的目录有可能是不能用的,需判定当前状态。此时不要对External一词感到疑惑,仅指该目录可以更好的存储用于分享的内容媒介。 它是一个可以持有想当多的数据的文件系统,该系统可以被所有应用访问但不需要任何权限。一般来说它是Sd卡,但“外部存储”也可以使内置的存储设备来实现,此时“外部存储”是区别于受保护的内部存储的, 并且“外部存储”可以作为一个文件系统安装在电脑上。
    在具有多用户的设备上(由UserManager描述),每一个用户有它们自己独立的外部存储。应用程序们在运行的时候可以仅访问用户的外部存储。具有多个外部存储目录的设备,一个外部存储目录意味着一个用户可以交互的主要的外部存储。为了避免玷污该用户的根命名空间,因此应用程序不应该直接使用这个顶级目录,可以访问(使用)次级存储目录。对于一个应用程序而言,任何私有的文件都应该存储在由Context.getExternalFilesDir方法返回的目录下,当该应用被卸载的时候,系统将考虑删除这个文件。其他共享型的文件则应该存放于由Environment类的getExternalStoragePublicDirectory(String)方法返回的目录下。拥有写的权限就默认拥有读的权限。从Android的KITKAT版本开始,如果我们的应用程序仅需存储内部数据,应该使用Context的getExternalFilesDir(String)方法与getExternalCacheDir()方法,这不需要读与写的权限。这两个方法返回的路径在不同的设备平台上可能会发生改变,因此应用程序应该仅仅持有相对路径。

    On devices with multiple users (as described by UserManager), each user has their own isolated external storage. Applications only have access to the external storage for the user they're running as.

  • 非常重要Environment.getExternalStoragePublicDirectory(Environment.TYPE);

      该方法用于Get a top-level public external storage directory for placing files of a particular type. 返回值为File类型。
    
      获得一个用于存储一个特殊类型文件的顶级公开外部存储目录。用户通常在这个目录存储管理它们自己的文件。因此我们应该考虑放在此处的文件内容,以确保我们不会删除他们的文件或者阻碍他们自己的管理。
    
      参数主要有:
      DIRECTORY_ALARMS     闹钟铃声文件类型。Standard directory in which to place any audio files that should be in the list of alarms that the user can select (not as regular music).
    
      DIRECTORY_DCIM     相机的图片或视频类型。The traditional location for pictures and videos when mounting the device as a camera.
    
      DIRECTORY_DOCUMENTS     文档类型。Standard directory in which to place documents that have been created by the user.
    
      DIRECTORY_DOWNLOADS     用户下载的文件。Standard directory in which to place files that have been downloaded by the user.
    
      DIRECTORY_MOVIES     用户可用的电影。Standard directory in which to place movies that are available to the user.
    
      DIRECTORY_MUSIC     标准音乐文件。Standard directory in which to place any audio files that should be in the regular list of music for the user.
    
      DIRECTORY_NOTIFICATIONS     音频文件通知铃声。Standard directory in which to place any audio files that should be in the list of notifications that the user can select (not as regular music).
    
      DIRECTORY_PICTURES     用户可用的图片Standard directory in which to place pictures that are available to the user.
    
      DIRECTORY_PODCASTS     播客音频。Standard directory in which to place any audio files that should be in the list of podcasts that the user can select (not as regular music).
    
      DIRECTORY_RINGTONES     手机铃声音频。Standard directory in which to place any audio files that should be in the list of ringtones that the user can select (not as regular music). 
    
  • Environment.getRootDirectory();

    该方法用于Return root of the "system" partition holding the core Android OS. 返回值为File类型。

Environment有如下4个is方法:

  • Environment.isExternalStorageEmulated();Environment.isExternalStorageEmulated(new File(new URI("123")));

    这两个方法用于:Returns whether the primary "external" storage device is emulated. If true, data stored on this device will be stored on a portion of the internal storage system.

  • Environment.isExternalStorageRemovable();Environment.isExternalStorageRemovable(new File(new URI("123")));

    这两个方法用于:true if the storage device can be removed (such as an SD card), or false if the storage device is built in and cannot be physically removed.

Context获取文件路径大揭秘

Context对象有如下四个方法用户获取文件(目录)路径:

  • getDir(String name,int mode);

    检索,必要时创建,一个新目录。应用程序在该目录下可以放置它自己的数据文件。我们可以使用该方法返回的目录对象创建或者访问该目录下的文件。需要注意的是通过文件对象创建的文件仅对该应用程序可见;我们仅仅可以设置整个目录的mode,而非单个文件。

  • openFileOutput(String name,int mode);

    打开与此上下文相关联的应用程序包的一个私有文件。如果这个文件不存在就创建它。由于属于内部存储,不需要权限。

  • getFilesDir();

    返回由openFileOutput(String,int)方法创建的用于存储文件的文件系统的绝对路径。因为这个路径是输出内部存储的,因此读写该目录下的文件是不需要权限的。

  • getExternalFilesDir(String type);

    该方法的参数使用的是Environment的成员变量,返回主要外部存储文件系统的绝对路径(同Environment.getExternalStorageDirectory()),应用程序可以在该路径下持久化它自己的文件。这些作为应用程序内部的文件,并没有像媒体一样通常对用户可见(通常是不可见的)。和getFilesDir()方法返回的目录下的文件一样,当应用卸载的时候这些文件将被删除,但二者有如下明显的不同:

  1. 外部文件不总是可使用的,如果用户拔掉了外部存储,或者外部存储挂载到了电脑上,其中的文件将消失。

  2. 没有安全执行这些文件。例如,任何一个具备WRITE_EXTERNAL_STORAGE权限的应用都可以写这些文件。

    从Android的KITKAT开始,读写该方法返回的路径下的内容是不需要权限的;它总是给调用应用程序访问,这仅仅适用于调用程序的包名路径生成。

参考1

参考2

参考3

代码为:String path = Envoronment.getExternalStorageDirectory().getPath +"BeautifulSchool";

路径为/storage/emulated/0/BeautifulSchool/文件名

代码为:String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath() + "BeautifulSchool";

路径为/storage/emulated/0/Pictures/BeautifulSchool/文件名

代码为:String path = context.getFileDir()+"BeautifulSchool";

路径为/data/user/0/com.qcsd99.www/files/BeautifulSchool/文件名

代码为:String path = context.getExternalFilesDir(null)+"BeautifulSchool";

路径为/storage/emulated/0/Android/data/com.qcsd99.www/files/BeautifulSchool/文件名

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 译自android.com 安卓为你是实现持久化数据提供了几种选择。具体的方案选择取决于你的特定需要,比如存储的数...
    gdut6049阅读 631评论 1 5
  • 作者:刘朋 链接:https://www.zhihu.com/question/19866689/answer/1...
    十七的样子阅读 769评论 0 0
  • 隔着一张桌的在我正前方用餐的女人是幸福的。 餐厅内灯光昏暗,掩盖不住满脸的细纹跟眼角额头深深的痕迹。但有时候,这样...
    微目阅读 359评论 0 0
  • 感恩王姐、赵总、同事们对我工作的关心和挽留。 感恩张亚楠和朱飞飞、叶秋楠分享他们对友邦和保险得理解。 感恩通过我的...
    爸爸爱布丁阅读 218评论 0 0