Android系统目录获取

内部存储

应用可以直接在设备的内部存储中保存文件而无需申请权限。默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问。应用被卸载这些文件也会被删除。内部存储一般保存datebase、ShapredPreferences等文件

方法名6.0获取的路径6.0系统是否需要运行时权限5.1 获取的路径
Context.getCacheDir()/data/user/0/包名/cache/data/data/包名/cache
Context.getFilesDir()/data/user/0/包名/files/data/data/包名/files
Context.getDir(String name,Context.MODE_PRIVATE)/data/user/0/包名/app_name/data/data/包名/app_name
Context.getPackageCodePath()/data/app/包名-1/base.apk一样
Context.getPackageResourcePath()/data/app/包名-1/base.apk一样
Context.getDatabasePath(String datebaseName)
返回用openOrCreateDatabase()方法创建的datebase在文件系统中的绝对路径
/data/user/0/包名/databases/datebaseName/data/data/包名/datebases
Environment.getDataDirectory()/date一样
Environment.getDownloadCacheDirectory()/cache一样
Environment.getRootDirectory()/system一样

外部存储

外部存储分为两种,一种是不可移除的内置SD卡,另一种是可移除的外置SD卡或OTG设备。保存到外部存储的文件时全局可读取文件,
要读取或写入外部存储上的文,必须获取 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE,如果同时需要读取和写入文件,则只需请求 WRITE_EXTERNAL_STORAGE 权限,因为此权限也隐含了读取权限要求。

/* 检查是否可读写 */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* 检查是否可读 */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

外部公共文件

方法名6.0获取的路径6.0系统是否需要运行时权限5.1 获取的路径
Environment.getExternalStorageDirectory()/storage/emulated/0/storage/sdcard
Environment.getExternalStoragePublicDirectory(String type)
type既可以自己指定,也可以使用Environment.DIRECTORY_MUSIC等sdk已定义常量
/storage/emulated/0/type/storage/sdcard/type

例如,以下方法在公共图片目录中创建了一个用于新相册的目录:

public File getAlbumStorageDir(String albumName) {
    // Get the directory for the user's public pictures directory.
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, "Directory not created");
    }
    return file;
}

私有文件

从 Android 4.4 开始,读取或写入应用私有目录中的文件不再需要 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,因此可以通过添加 maxSdkVersion 属性来声明,只能在较低版本的 Android 中请求该权限:

<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                     android:maxSdkVersion="18" />
    ...
</manifest>
方法名6.0获取的路径6.0系统是否需要运行时权限5.1 获取的路径
getExternalCacheDir()/storage/emulated/0/Android/data/包名/cache/storage/sdcard/Android/data/包名/cache
getExternalFilesDir(String type)/storage/emulated/0/Android/data/包名/files/type/storage/sdcard/Android/data/包名/type

type既可以自己指定,也可以使用Environment.DIRECTORY_MUSIC等sdk已定义常量,如果为空字符串或null,则返回/storage/emulated/0/Android/data/包名/files

尽管 MediaStore 内容提供程序不能访问 getExternalFilesDir()getExternalFilesDirs() 所提供的目录,但其他具有 READ_EXTERNAL_STORAGE 权限的应用仍可访问外部存储上的所有文件,包括上述文件。
当应用被卸载时,这些目录也会被删除

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值