首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: java.io.IOException: android 11中没有这样的文件或目录

错误: java.io.IOException: android 11中没有这样的文件或目录
EN

Stack Overflow用户
提问于 2021-05-10 10:00:27
回答 3查看 4.2K关注 0票数 3

我试图在文件系统上创建一个文件,但我仍然得到了这个异常:

代码语言:javascript
复制
private fun getTempFolder(): File {
        val directoryFolder =
            File(Environment.getExternalStorageDirectory(), "sample-take-image")
        directoryFolder.mkdirs()
        return directoryFolder
    }
    private fun getTempFile(): File {
        val timeStamp = SimpleDateFormat("yyyyMMdd_HHMMss", Locale.getDefault()).format(Date())
        return File(
            getTempFolder().absolutePath,
            "image".plus(Calendar.getInstance().timeInMillis).plus(timeStamp).plus(".jpg")
        )
    }
    private fun saveImageToFile(bitmap: Bitmap? = null): String? {
        return try {
            val file = getTempFile()
            Timber.e("Path: + : ${file.absolutePath}")
            file.createNewFile()
            val fOut = FileOutputStream(file)
            bitmap?.apply {
                this.compress(Bitmap.CompressFormat.JPEG, 100, fOut)
            }
            fOut.flush()
            fOut.close()
            file?.absolutePath.getDefault()
        } catch (e: Exception) {
            e.printStackTrace()
            ""
        }
    }

尽管我在拍照后得到了链接:

/storage/emulated/0/sample-take-image/image162064003789420210510_160517.jpg:

所以有人能告诉我为什么在这种情况下我不能创建这个文件。我目前在Android 11上

**汇编30

代码语言:javascript
复制
buildToolsVersion "30.0.2"

minSdkVersion 26**
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-10 10:07:44

在Android 11设备上,您不能在外部存储的根目录中创建目录或文件。

但是,您可以在所有已经存在的公共目录中。

代码语言:javascript
复制
File(Environment.getExternalStorageDirectory(), "sample-take-image")

例如,以下列方式取代:

代码语言:javascript
复制
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "sample-take-image")
票数 6
EN

Stack Overflow用户

发布于 2021-05-10 10:08:26

使用getExternalFilesDir()getExternalCacheDir()getExternalMediaDirs() (上下文上的方法),而不是Environment.getExternalStorageDirectory(),因为这是不推荐的。

票数 2
EN

Stack Overflow用户

发布于 2022-01-07 09:47:09

代码语言:javascript
复制
String dirPath;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
                dirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath() + "/" + getString(R.string.app_name) + "/";
            } else {
                dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getString(R.string.app_name) + "/";
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67468448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档