java - Android在内部根目录中创建文件夹
问题描述
我需要在内存根目录中创建一个文件夹并在其中创建一个文件,但找不到下面的代码工作。
String path = Environment.getRootDirectory().toString();
File mFolder = new File(path,"Folder");
if (!mFolder.exists()) {
boolean res = mFolder.mkdir();
}
并且 mkdir 总是返回 false。我已经找到了getDataDirectory()
,getFilesDir()
但我不需要。我需要创建一个目录,其中内存根位置(我们打开内存时首先看到的位置)
编辑:
根文件夹我的意思是我们在使用文件浏览器打开的内部存储器上看到的第一个位置。在哪里我可以看到Download
,Pictures
等Android
。
解决方案
你应该使用getExternalStorageDirectory()
并且你应该请求它的写权限。
但是注意getExternalStorageDirectory()
在 android 29 上已弃用,这意味着您应该使用getExternalFilesDir()
, getExternalCacheDir()
,或者getExternalMediaDir()
如果您根据文件的内容定位较新的 android 版本。
您应该请求对清单的写入权限(对于旧的 android 版本,Build.VERSION.SDK_INT < 23)并在运行时请求它们(对于较新的 android 版本,Build.VERSION.SDK_INT >= 23)
检查用户是否已授予外部存储权限:
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission granted");
//File write logic here
return true;
}
如果未授予许可,您应该提出以下要求:
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
并实现OnRequestPermissionResult
以获取结果回调。
所有这些信息和更多代码都可以在这里找到https://developer.android.com/training/permissions/requesting
推荐阅读
- dataset - 我在哪里可以获得 HEVC 的测试序列?
- jquery - 使用 JQuery Validator 验证 3 个输入
- entity-framework - 序列化 EF 框架 DbCompiledModel
- asp.net-mvc - 如何在 asp.net razor 的 html 中使用 if 子句代码?
- css - 当我使用居中图像容器时页面向右溢出
- php - Laravel required_if 和 mimes 不适用于文件输入
- r - For循环在R中重命名数据框中的对象(+忽略NA)
- javascript - 使用带有副作用的 React 自定义 Hook 进行事件处理(例如 OnClick)
- hyperlink - 无法将 img 链接到博主中的文章
- matlab - 替代 rlocfind 在 Matlab 中找到恒定阻尼比线与根轨迹的交点