我本来拥有的是:
创建的文件,其中一些内容位于内部存储器上
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。