You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Marshmallow授权后仍无法在Documents文件夹创建文件夹

解决Android Marshmallow无法在Documents文件夹创建文件夹的问题

嘿,我帮你揪出问题所在啦,主要是代码里的方法用错了,还有一些可以优化的细节,咱们一步步说:

核心错误:创建文件夹用错了方法

你现在调用的file.createNewFile()是用来创建普通文件的,不是文件夹!要创建文件夹,得用专门的方法:

  • file.mkdir():创建单级目录(如果父目录不存在,会创建失败)
  • file.mkdirs():创建多级目录(如果父目录不存在,会自动创建所有需要的父目录)

你的场景里,Documents目录肯定是存在的,用mkdir()就够,但mkdirs()更稳妥,能兼容后续可能的路径变化。

路径拼接的优化建议

直接用字符串拼接路径的方式容易出现分隔符问题,建议用File的构造函数来生成目标文件夹对象,系统会自动处理路径分隔符:

val documentsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
val targetDir = File(documentsDir, "justCheck")

修正后的完整代码

把这些调整后,你的代码应该改成这样:

val documentsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
val targetDir = File(documentsDir, "justCheck")
if (!targetDir.exists() || !targetDir.isDirectory) {
    // 如果目录不存在,或者存在但不是文件夹(比如是同名文件),就创建
    val isCreated = targetDir.mkdirs()
    // 可以加日志或Toast确认创建结果
    if (isCreated) {
        // 创建成功逻辑
    } else {
        // 创建失败,可排查权限或路径可写性
    }
}

权限相关补充说明

在Android 6.0(Marshmallow)中,WRITE_EXTERNAL_STORAGE权限已经隐含了READ_EXTERNAL_STORAGE权限,所以你Manifest里的<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />其实可以去掉,不过留着也不会有问题。

如果还是创建失败,你可以额外检查:

  • 用ContextCompat.checkSelfPermission()方法验证运行时权限是否真的授予
  • 确认目标路径是否可写(部分定制ROM可能限制公共目录的写入权限)

内容的提问来源于stack exchange,提问作者Gissipi_453

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:16:01