首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android文件存储路径

Android文件存储路径

作者头像
码客说
发布2020-05-09 14:46:37
发布2020-05-09 14:46:37
3.7K00
代码可运行
举报
文章被收录于专栏:码客码客
运行总次数:0
代码可运行

注意点

  • 使用内部存储应用卸载后,存储的文件自动删除
  • 使用外部存储要申请权限,并且要判断外部存储是否可用

实例

代码语言:javascript
代码运行次数:0
运行
复制
public static String getFilePath(Context context, String dir) {
    String directoryPath = "";
    //判断外部存储是否可用
    if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
        directoryPath = context.getExternalFilesDir(dir).getAbsolutePath();
    } else {//没外部存储就使用内部存储
        directoryPath = context.getFilesDir() + File.separator + dir;
    }
    File file = new File(directoryPath);
    if (!file.exists()) {//判断文件目录是否存在
        file.mkdirs();
    }
    return directoryPath;
}

context.getCacheDir

代码语言:javascript
代码运行次数:0
运行
复制
File cacheDir = context.getCacheDir();

特点

  • 应用内部存储空间
  • 数据文件私有
  • 不需要申请权限
  • 当应用被卸载的时候,目录下的文件会被删除
  • 存储小文件

需要注意的是,这个文件的目录和应用的存储位置有关, 当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径。

这个目录和getFilesDir()目录最大的不同在于:当安卓设备的存储空间少,或者不够用的时候,系统会自动删除这个目录下的文件。

官方建议是,超过1MB的文件,建议存储到getExternalCacheDir()目录下

context.getExternalCacheDir

代码语言:javascript
代码运行次数:0
运行
复制
File externalCacheDir = context.getExternalCacheDir();

特点

  • 应用外部存储空间
  • 数据文件私有
  • 需要申请权限(READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
  • 需要判断外部存储的挂载状态(getExternalStorageState(File)
  • 当应用被卸载的时候,目录下的文件会被删除
  • 存储大文件

当应用被卸载的时候,目录下的文件会被删除,但是这里和getCacheDir()还有不同之处:

只有手机系统使用的是虚拟外部存储(虚拟SD卡)的时候,才可以在卸载应用的同时,自动删除该目录下的文件 如果是之前的物理存储(物理SD卡)则不会自动删除该目录,及目录下的文件

context.getFilesDir

代码语言:javascript
代码运行次数:0
运行
复制
File filesDir = context.getFilesDir();

特点

  • 应用内部存储空间
  • 数据文件私有
  • 不需要申请权限
  • 当应用被卸载的时候,目录下的文件会被删除

当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径 系统提供的访问此路径文件的方法是:

代码语言:javascript
代码运行次数:0
运行
复制
context.openFileOutput(String,int);
context.openFileInput(String name);

context.getExternalFilesDir

代码语言:javascript
代码运行次数:0
运行
复制
File externalFilesDir = context.getExternalFilesDir(null);

特点

  • 应用外部存储空间
  • 数据文件私有
  • 需要申请权限(READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
  • 需要判断外部存储的挂载状态(getExternalStorageState(File)
  • 当应用被卸载的时候,目录下的文件会被删除

当应用被卸载的时候,目录下的文件会被删除,但是这里和getFilesDir()还有不同之处:

只有手机系统使用的是虚拟外部存储(虚拟SD卡)的时候,才可以在卸载应用的同时,自动删除该目录下的文件,如果是之前的物理存储(物理SD卡)则不会自动删除该目录,及目录下的文件

Environment.getExternalStorageDirectory

代码语言:javascript
代码运行次数:0
运行
复制
File externalStorageDirectory = Environment.getExternalStorageDirectory();

特点

  • 应用外部存储空间
  • 数据文件非私有
  • 需要申请权限(READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
  • 需要判断外部存储的挂载状态(getExternalStorageState(File)
  • 当应用被卸载的时候,目录下的不会被删除

注:在该目录下读写文件,需要获取读写权限 该目录下的文件,这个目录是用户进行操作的一个根目录,进入二级目录可以通过 getExternalFilesDirs(String), getExternalCacheDirs(), and getExternalMediaDirs()这些方法

官方建议:

不要直接使用该目录,为了避免污染用户的根命名空间 应用私有的数据,应该放在 context.getExternalFilesDir目录下 其他的可以被分享的文件,可以放在Environment.getExternalStoragePublicDirectory(String)目录下

Environment.getExternalStoragePublicDirectory

代码语言:javascript
代码运行次数:0
运行
复制
File externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

特点

  • 应用外部存储空间
  • 数据文件非私有
  • 需要申请权限(READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
  • 需要判断外部存储的挂载状态(getExternalStorageState(File)
  • 当应用被卸载的时候,目录下的不会被删除

这个目录是用来存放各种类型的文件的目录,在这里用户可以分类管理不同类型的文件(例如音乐、图片、电影等) 类型如下:

  • DIRECTORY_MUSIC
  • DIRECTORY_PODCASTS
  • DIRECTORY_RINGTONES
  • DIRECTORY_ALARMS
  • DIRECTORY_NOTIFICATIONS
  • DIRECTORY_PICTURES
  • DIRECTORY_MOVIES
  • DIRECTORY_DOWNLOADS
  • DIRECTORY_DCIM
  • DIRECTORY_DOCUMENTS
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注意点
  • context.getCacheDir
  • context.getExternalCacheDir
  • context.getFilesDir
  • context.getExternalFilesDir
  • Environment.getExternalStorageDirectory
  • Environment.getExternalStoragePublicDirectory
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档