广告
返回顶部
首页 > 资讯 > 移动开发 >Android-存储路径与管理应用文件存储方法汇总
  • 585
分享到

Android-存储路径与管理应用文件存储方法汇总

方法存储方法汇总Android 2022-06-06 13:06:18 585人浏览 泡泡鱼
摘要

一、获取设备存储路径         Android手机存储分为两个部分:内部存储和外部存储,内部存储一般是手机自带的存储空间,外部存储指外插SD卡提供的存储空间;随着手机发展

一、获取设备存储路径

        Android手机存储分为两个部分:内部存储和外部存储,内部存储一般是手机自带的存储空间,外部存储指外插SD卡提供的存储空间;随着手机发展,这两个存储的定义又有了一些些变化,新的手机不再有外插SD卡的概念,采取了内置闪存(EMMC、UFS等)的方式,所以内部存储和外部存储在新的Android手机上已经在同一个硬件上了。

1.1、获取与应用相关的文件目录--Context


mContext.getCacheDir()                    /data/user/0/package name/cache
mContext.getDir("spanner",MODE_PRIVATE)   /data/user/0/package name/app_spanner
mContext.getFileDir()                     /data/user/0/package name/files
mContext.getExternalCacheDir()            /storage/emulated/0/Android/data/package name/cache
mContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES)  
    /storage/emulated/0/Android/data/package name/files/Pictures
mContext.getExternalFilesDir(null)        /storage/emulated/0/Android/data/package name/files
mContext.getExternalMediaDirs()           /storage/emulated/0/Android/media/package name/

注意:/data/user/0/ 等同于 /data/data/;内部存储在其他应用和用户(文件管理器)无法直接访问

1.2、获取公有存储位置的文件目录--Environment

与应用相关的为私有目录,Android还定义了一些如下的公有目录


    public static final String[] STANDARD_DIRECTORIES = {
            DIRECTORY_MUSIC,
            DIRECTORY_PODCASTS,
            DIRECTORY_RINGTONES,
            DIRECTORY_ALARMS,
            DIRECTORY_NOTIFICATioNS,
            DIRECTORY_PICTURES,
            DIRECTORY_MOVIES,
            DIRECTORY_DOWNLOADS,
            DIRECTORY_DCIM,
            DIRECTORY_DOCUMENTS
    };
//获取方式
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)        
    /storage/emulated/0/DCIM
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)    
    /storage/emulated/0/Pictures
    ......

公有目录可通过getExternalStoragePublicDirectory获取,如果该目录不存在,调用时会自动生成该目录。

1.3、其它系统目录


Environment.getExternalStorageDirectory()                /storage/emulated/0
Environment.getDataDirectory()                           /data
Environment.getDownloadCacheDirectory()                  /data/cache
Environment.getRootDirectory()                           /system
二、存储策略

2.1、内部存储---内部存储的文件夹其他应用和用户无法直接访问,可以用于存放敏感数据。

2.1.1、getCacheDir()---专门用于存放缓存数据。用户对app进行缓存清理的时候会清理缓存目录cache的数据,手机空间不足的时候系统也会对缓存目录内的数据进行清理。但尽管如此,开发者仍要管理好缓存数据特别是内部存储的缓存,避免缓存数据过大。

2.1.2、getFileDir()---可用于用于存放私有持久文件。非常适合用于存放app各种伴随app运行周期所需要的文件数据,它既不会因为手机存储空间不足而被清理,也不会因卸载app而遗留数据垃圾,并且它是私有的。

2.1.3、getDir(String name,int mode)---归类存放私有文件。在内部私有目录下会创建一个名为name的文件夹,mode以前是可以设置文件夹私有(MODE_PRIVATE)和公有的(MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE),但目前公有的mode都已经废弃,意味着这个api创建的文件夹已经完全私有,不能再共享出去了。

2.2、外部存储---使用外部存储之前一定要检查外部存储是否可用,因为旧设备不一定会有外部存储,新设备需要动态申请权限不一定可以使用。


public static boolean isSDCardEnable() {
    return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
}

另外,需要声明权限(android.Manifest.permission#WRITE_EXTERNAL_STORAGE​  android.Manifest.permission#READ_EXTERNAL_STORAGE)

2.2.1、getExternalCacheDir()---专门用于存放缓存数据。和内部存储的getCacheDir()相似。

2.2.2、getExternalFilesDir(String type)---归类存放公有文件。如果type不为null的话在外部私有目录下创建返回一个名为type的文件夹,为null直接返回外部私有根目录。如无特别需要,个人的做法是传入Environment的DIRECTORY常量进行文件夹创建。

2.2.3、getExternalMediaDirs()---可存放共享媒体文件。这个是在Android 5.0加入的api,创建和获取位于/sdcard/Android/media目录下的应用目录,该目录下的文件能够被其他应用访问和被MediaStore查询和获取。但目前较少开发者在使用这个api。

2.3、公有目录--获取公有目录要使用Environment的Api,它返回的目录全都是共享的公有目录。造成Android手机文件存储混乱的罪魁祸首!

2.3.1、getExternalStorageDirectory()---获取外部存储(SD卡)的根目录。使用getExternalStoragePublicDirectory(String)进行替代即可。

2.3.2、getExternalStoragePublicDirectory(String type)

使用频率极高的api,返回在根目录下的名为type的文件夹,我把它分为两种用法:一种是传入Environment的DIRECTORY常量再创建子目录使用;一种是传入appPackageName或者易被识别归属的名称创建子目录使用。前者会比较通用,内容可以被各种工具app搜索发现(包括微信);后者算是私用,可以存放不跟随app生命的文件,即卸载后也可以保留。

Environment.DIRECTORY_DCIM是手机的相册,这个文件夹都是系统相关的app在用,存放相机拍摄的图片,手机截图之类的,不推荐开发者使用这个文件夹,避免混乱。值得一提的是淘宝有在使用这个文件夹,用于保存它的商品分享截图,这个位置的确可以避免被微信封杀

Environment.DIRECTORY_PICTURES用于存放各种“正式的”图片,强烈建议在这里创建文件夹存放你想要被用户发现的图片,并且微信会扫描这个文件夹,让你的图片更容易分享。

Environment.DIRECTORY_DOWNLOADS可以用于存放app更新的apk等下载资源。

2.4、获取文件路径这件事永远不能写死某个路径,因为设备可能不存在SD卡,或者不同平台的外部存储挂载路径是不相同的,所以管理文件的时候必须要有存储策略。比如尽量用Android标准的接口获取目录;比如一个文件的保存地址获取方法里不能只有一个api,要保有兜底措施,如果我不能存在外部储存,那我就存在内部,保证app的功能正常运行。


作者:STU_11wxzou


--结束END--

本文标题: Android-存储路径与管理应用文件存储方法汇总

本文链接: https://www.lsjlt.com/news/29316.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作