当前位置: 首页 > 知识库问答 >
问题:

Android无法创建目录

柴宏阔
2023-03-14

我无法创建目录,我拥有所有权限,这在我的清单中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在MainActivity onCreate中,检查权限,如果有权限,则应创建一个目录,但始终返回false:

if (!checkPermission()) requestPermission();
    else {
        File folder = new File(Environment.getExternalStorageDirectory() +
                File.separator + "receipts");
        if (!folder.exists()) {
            boolean bool = folder.mkdirs();
            System.out.println(bool);
        }
    }

有什么线索或暗示吗?谢谢

共有2个答案

慕容烨
2023-03-14

File folder=新文件(Environment.getExternalStorageDirectory()文件)。分隔符“收据”);

更改为:

 File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "receipts");
郏瀚
2023-03-14

不幸的是,随着Android 11及更高版本带来的安全更新,正如@Common sWare所说,您根本无法在外部存储(sdcard)上编写目录。

直接来自文档:

访问目录

您不能再使用ACTION_OPEN_DOCUMENT_TREE意图操作来请求访问以下目录:

内部存储卷的根目录设备制造商认为可靠的每个SD卡卷的根目录,无论该卡是仿真的还是可移动的可靠卷是一个应用程序可以在大部分时间成功访问的下载目录。

另外从同一个地方:

外部存储上的应用程序特定目录从Android 11开始,应用程序无法在外部存储上创建自己的应用程序特定目录。要访问系统为应用程序提供的目录,请调用getExternalFilesDirs()。

您的应用程序有一个系统生成的目录来存储任何信息。当然,这是有道理的,因为在任何给定时间,用户都可以删除/格式化设备内的sd卡,并且您的应用程序的数据将完全丢失。

来自更多文档:

你可以用它来写:

//Write to a file
String filename = "myfile";
String fileContents = "Hello world!";
try (FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE)) {
    fos.write(fileContents.toByteArray());
}

要读取文件:

//To read from the file
FileInputStream fis = context.openFileInput(filename

);
InputStreamReader inputStreamReader =
        new InputStreamReader(fis, StandardCharsets.UTF_8);
StringBuilder stringBuilder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(inputStreamReader)) {
    String line = reader.readLine();
    while (line != null) {
        stringBuilder.append(line).append('\n');
        line = reader.readLine();
    }
} catch (IOException e) {
    // Error occurred when opening raw file for reading.
} finally {
    String contents = stringBuilder.toString();
}

这些都在您的应用程序的“沙盒”文件夹中。因此,您无需声明权限。

 类似资料:
  • 我正在使用Helm在Kubernetes集群上部署postgres。我创建了一个持久卷和一个持久卷声明: 我该怎么修好它?

  • 创建JVM失败:错误代码-4。JVM路径:C:\Program Files\java\jdk1.7.0_79\jre如果您已经安装了32位JDK,请定义一个JAVA_HOME变量

  • 问题内容: 我正在创建一个简单的android应用程序…启动Android Studio时更新gradle时遇到了麻烦,它也提示了我。 更新完成后,我收到以下错误: 错误:任务’:app:compileDebugJavaWithJavac’的执行失败。 无法为文件“ /Users/damenTomassi/AndroidStudioProjects/AstraeaDemo/app/src/main

  • 我正在努力实现的目标: 创建一个新的Laravel项目 我正在尝试的是: 我一直在尝试按照安装说明进行操作 当我尝试运行以下命令时: 它返回以下错误: 您可以查看我的图片了解详细信息:终端 我在ubuntu 18.04上。 非常感谢你的帮助。。

  • ProjectConfigurationException:配置项目“:App”时出现问题。在org.gradle.configuration.project.lifecycleProjectEvaluator.addConfigurationFailure(lifecycleProjectEvaluator.java:94)在org.gradle.configuration.project.li

  • 问题内容: 我在这里按照教程进行操作, 因此无法执行“将Vitamio用作Android库项目”的操作。 如何将其用作Android库项目? 问题答案: 创建图书馆项目 使用以下步骤 文件->新建->其他 选择Android项目 选择“从现有来源创建项目” 单击“浏览…”按钮,然后在PC中导航到 Vitamio 添加项目后,单击“完成”(工作区中现在为 Vitamio 项目) 右键单击您的项目->