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
相关产品推荐
相关产品推荐

