【问题标题】:Can't create a folder in external storage, Android无法在外部存储中创建文件夹,Android
【发布时间】:2020-11-17 17:42:05
【问题描述】:

我尝试了很多来寻找解决方案,但到目前为止一切都失败了。这可能是一些愚蠢的事情。

我正在尝试将照片以 jpeg 格式保存在手机的存储空间中。即使是制作文件夹的简单任务,一切都失败了。下面的代码是我用来创建文件夹的代码。

private void makeFolder(){
    try{
        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),getString(R.string.app_name));
        boolean success = true;
        if (!folder.exists()) {
            success = folder.mkdirs();
        }
        if (success) {
            Toast.makeText(this,"Done",Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this,"folder_failed",Toast.LENGTH_SHORT).show();
            System.out.println(folder.getAbsolutePath());
        }
    }catch (Exception e){
        Toast.makeText(this,"exception",Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
}

我尝试了很多不同的方法,例如:

        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
                File.separator + getString(R.string.app_name)+File.separator);

        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
                File.separator + getString(R.string.app_name);
        
        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                ,getString(R.string.app_name));

我已经尝试过 mkdirs 和 mkdir 和

-Environment.getExternalStorageDirectory().getAbsolutePath()
-getExternalStorageDirectory().getAbsolutePath()
-Environment.getExternalStorageDirectory()
-getExternalStorageDirectory()

权限存在于清单中并被接受。

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

System.out 打印的路径是“/storage/emulated/0/appname”

我不知道还能尝试什么。类似的代码适用于其他应用程序。最小 API 为 23。 非常感谢任何帮助。

【问题讨论】:

  • READ_EXTERNAL_STORAGE 怎么样?您是否遇到任何类型的错误/异常?
  • 测试设备的 Android 版本是多少? Android 10/Q?
  • READ_EXTERNAL_STORAGE 也存在。上面的代码不会抛出任何异常。当我稍后尝试使用“.createNewFile();”创建文件时它确实会引发异常“找不到文件”。但文件夹创建无一例外失败
  • 如果您尝试在 API 级别 29+ 中创建,那么它不起作用。检查这个答案@mremremre1 Can't create directory in Android 10

标签: java android android-external-storage mkdirs


【解决方案1】:

我建议你试试Context.getExternalFilesDir() 而不是Environment.getExternalStorageDirectory()

【讨论】:

  • 这行得通。谢谢你。它在 Android/data/"app path"/myfolder 中创建文件夹。这对我来说很好。是不是不再支持在根目录下制作文件了?
  • @mremremre1 我很高兴这有效,希望它能让您实现正确的逻辑。另请注意,getExternalStorageDirectory 已弃用,不适用于某些设备
【解决方案2】:

如果您的测试设备运行 Android 10/Q 或 API 级别 29+:将数据存储到媒体文件夹会有一些权限更改。您可以将数据毫无问题地存储到您的应用文件夹中,但如果您删除该应用,图像也会消失。

最简单的方法是在应用程序下的清单中添加 android:requestLegacyExternalStorage="true" 但这更像是一种变通方法,可能不会长期支持。

在此处搜索“store image android 10”,您会找到适合自己的方式。

【讨论】:

  • 它没有,但我会检查您的解决方案以了解未来的兼容性。谢谢
  • 我刚刚尝试将其添加到清单中。它使“.getExternalStorageDirectory()”按预期工作。
  • 这样您就可以在自己的应用程序之外创建一个文件夹吗?我很乐意提供帮助。
  • 在 emulated/0/ 内是的
猜你喜欢
  • 2014-04-17
  • 2012-01-13
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多