如何在 Android 10 以上使用 MediaStore 编辑文件而不是创建新文件?

How to edit a file instead of creating a new one using MediaStore above Android 10?

我尝试使用带有上述代码的 MediaStore 在 Documents 外部目录中创建一个文件:

        val resolver = applicationContext.contentResolver
        val contentValues = ContentValues().apply {
            put(MediaStore.MediaColumns.DISPLAY_NAME, "doc.txt")
            put(MediaStore.MediaColumns.MIME_TYPE, "text/plain")
            put(MediaStore.MediaColumns.RELATIVE_PATH, "Documents")
        }

        val uri = resolver.insert(MediaStore.Files.getContentUri("external"), contentValues)

        uri?.let {
            resolver.openOutputStream(it).use {
                // Write file
                it?.write("line1".toByteArray(Charset.defaultCharset()))
                it?.write("line2".toByteArray(Charset.defaultCharset()))
                it?.close()
            }

        }

我第一次执行此代码时,文件 'doc.txt' 按预期创建。

但是如果我再次执行相同的代码,它会创建一个新文件 'doc (1).txt' 而不是编辑我已经创建的文件。

当原始 'doc.txt' 文件已经存在时,如何修改它?

根据我的理解,我应该可以写这个文件,因为它是我创建的。

But if I execute the same code again, it create me a new file 'doc (1).txt' instead of editing the file I already created.

您的代码做了两件事:

  • MediaStore
  • 中插入一个新条目
  • insert() 返回的 Uri 打开一个 OutputStream 并将内容写入该流

如果您不想添加新条目,请不要插入。

How can I modify the original 'doc.txt' file when it already exist ?

为您最初获得的 Uri 打开一个 OutputStream,然后将内容写入该流。