Android文件存储

Android文件存储
1.getFilesDir(),
2.getCacheDir(),
3.getExternalFilesDir(null),
4.getExternalCacheDir(),
5.Environment.getExternalStorageDirectory(),
6.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
7.面向 Android 7.0文件存储变化

1.getFilesDir

应用内部存储空间(数据文件私有)文件存储到这个路径下,不需要申请权限,当应用被卸载的时候,目录下的文件会被删除。
需要注意的是,这个文件的目录和应用的存储位置有关,
当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径
系统提供的访问此路径文件的方法是:context.openFileOutput(String,int);context.openFileInput(String name);

/**
 * app私有目录,如shared preference文件,数据库文件
 * 目录为data/data/< package name >/files/
 */
public static File getInternalFilePath ( Activity activity ) {
    return activity.getFilesDir();
}

2.getCacheDir();

应用内部存储空间(数据文件私有)文件存储到这个路径下,不需要申请权限,当应用被卸载的时候,目录下的文件会被删除。
需要注意的是,这个文件的目录和应用的存储位置有关,
当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径。
这个目录和getFilesDir()目录最大的不同在于:当安卓设备的存储空间少,或者不够用的时候,系统会自动删除这个目录下的文件。
官方建议是,超过1MB的文件,建议存储到getExternalCacheDir()目录下

/**
 * app私有缓存目录:删除所有不再需要的文件,有些项目中清理缓存数据,就是这个文件中的数据
 * 如果在系统即将耗尽存储,它会在不进行警告的情况下删除您的缓存文件。
 * 获取/data/data/<application package>/cache目录
 */
public static File getInternalCachePath ( Activity activity ) {

    return activity.getCacheDir();
}

3.getExternalFilesDir(null);

应用外部存储空间(数据文件私有,系统媒体文件无法访问(例如存了一个MP3文件,通过系统的文件夹管理系统,无法找到)),
当应用被卸载的时候,目录下的文件会被删除,但是这里和getFilesDir()还有不同之处:
只有手机系统使用的是虚拟外部存储(虚拟SD卡)的时候,
才可以在卸载应用的同时,自动删除该目录下的文件,如果是之前的物理存储(物理SD卡)则不会自动删除该目录,及目录下的文件
在使用的时候,需要判断外部存储的挂载状态(getExternalStorageState(File)),还需要申请读写权限(READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE)
注:当其他应用拥有SD卡读写权限的时候,可以访问该目录下的文件

/**
 * 外置files文件夹--对应 设置->应用->应用详情里面的”清除数据“选项
 * 这个目录下的所有文件都会被删除,不会留下垃圾信息
 * SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
 */
public static File getExternalFilesDir ( Context context ) {
    if ( FileUtil.sdCardIsAvailable() ) {
        return context.getExternalFilesDir( null );
    }
    return context.getFilesDir();
}

4.getExternalCacheDir();

应用外部存储空间(数据文件私有,系统媒体文件无法访问(例如存了一个MP3文件,通过系统的文件夹管理系统,无法找到)),
当应用被卸载的时候,目录下的文件会被删除,但是这里和getCacheDir()还有不同之处:
只有手机系统使用的是虚拟外部存储(虚拟SD卡,现在绝大多数的手机,都不用外挂物理SD卡了)的时候,
才可以在卸载应用的同时,自动删除该目录下的文件,如果是之前的物理存储(物理SD卡)则不会自动删除该目录,及目录下的文件。
在使用的时候,需要判断外部存储的挂载状态(getExternalStorageState(File)),还需要申请读写权限(READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE)
注:当其他应用拥有SD卡读写权限的时候,可以访问该目录下的文件

/**
 * 外置缓存文件夹 -- 对应 设置->应用->应用详情里面的”清除缓存“选项
 * 这个目录下的所有文件都会被删除,不会留下垃圾信息
 * SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
 */
public static File getExternalCacheDir ( Activity activity ) {
    return activity.getExternalCacheDir();
}

5.Environment.getExternalStorageDirectory();

应用外部存储空间(数据文件非私有,可以被手机的系统程序访问(如MP3格式的文件,会被手机系统检索出来),同样,该目录下的文件,所有的APP程序也都是可以访问的,)
注意:外部存储空间可能处于不可访问状态,或者已经被移除状态,或者存储空间损坏无法访问等问题。可以通过getExternalStorageState()这个方法来判断外部存储空间的状态。
注:在该目录下读写文件,需要获取读写权限
该目录下的文件,这个目录是用户进行操作的一个根目录,进入二级目录可以通过
getExternalFilesDirs(String), getExternalCacheDirs(), and getExternalMediaDirs().这些方法
官方建议,不要直接使用该目录,为了避免污染用户的根命名空间,应用私有的数据,应该放在 Context.getExter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值