Изначально у меня есть:
Созданный файл с некоторым содержимым во внутренней памяти:
DocumentFile newFile = pickedDir.createFile("text/plain", filename);
OutputStream out = context.getContentResolver().openOutputStream(newFile.getUri());
out.write("some old content".getBytes());
out.close();
return newFile.getUri().toString();
, поэтому в конце я получил строку uripath
из DocumentFile.getUri().toString();
Теперь я хочу переписать этот файл.Что бы я ни делал, размер файла остается неизменным.Если новый контент больше старого, он просто обрезает его.Если содержимое меньше, например, всего несколько символов, оно добавляет специальные символы \00
, чтобы заполнить старый размер.
вот важная часть метода:
OutputStream out = context.getContentResolver().openOutputStream(Uri.parse(filepath));
String content = "sime new content"
IOUtils.write(countent, out, "UTF-8");
out.close();
Итак, как мне действительно переопределить мой файл новым содержимым?
РЕШЕНИЕ
проблема была не в самом OutputStream, а в кэшированном файле на Android-устройстве.Я проверил содержимое файла, когда мой телефон был подключен к компьютеру через USB (к компьютеру с Linux).И в этом случае размер файла был кэширован.После отключения телефона от сети можно увидеть, что файл обновлен правильно.так что не обращайте на это внимания с помощью outputStream.