Как отредактировать файл вместо создания нового с помощью MediaStore выше Android 10? - PullRequest
0 голосов
/ 09 марта 2020

Я попытался создать файл во внешнем каталоге Documents с помощью MediaStore с указанным выше кодом:

        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()
            }

        }

При первом выполнении этого кода файл 'do c. txt ' создается как ожидалось.

Но если я снова выполню тот же код, он создаст мне новый файл ' do c (1) .txt ' вместо редактирование файла, который я уже создал.

Как изменить исходный файл 'do c .txt' , когда он уже существует?

В моем понимании, я должен иметь возможность писать в этот файл, потому что я его создал.

1 Ответ

0 голосов
/ 09 марта 2020

Но если я снова выполню тот же код, он создаст мне новый файл 'do c (1) .txt' вместо редактирования файла, который я уже создал.

Ваш код выполняет две функции:

  • Вставляет новую запись в MediaStore
  • Открывает OutputStream для Uri, возвращенного insert(), и записывает содержимое в него stream

Если вы не хотите вводить новую запись, не вставляйте ее.

Как изменить исходный файл do c .txt, если он уже существует?

Откройте OutputStream для Uri, который вы получили изначально, и запишите содержимое в этот поток.

...