java - 如何重写文档文件
问题描述
我想让用户拿起文件夹,我的应用程序将在这个文件夹中创建一个文件。所以我用Intent.ACTION_OPEN_DOCUMENT_TREE
. 谷歌说我需要使用 DocumentFile 而不是 File。以前我使用 File 并希望得到类似于下面代码结果的结果
FileOutputStream fs = new FileOutputStream(mFile);
Writer writer = new BufferedWriter(new OutputStreamWriter(fs));
writer.append(mContent);
但是 DocumentFile 不是文件,我不能使用 FileOutputStream。所以我使用 OutputStream 编写了这段代码
Uri treeUri = data.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(MainActivity.this, treeUri);
DocumentFile mFile = pickedDir.createFile("text/plain", "Note");
OutputStream out = getContentResolver().openOutputStream(mFile.getUri());
out.write(infos.get(i).getContent().getBytes());
out.flush();
out.close();
此代码不会重写我的文件,而是创建另一个名为 Note(1) 的文件所以我想知道是否有一种方法可以使用 OutputStream 或另一种方法使用 FileOutputStream 来重写文件,但我不知道如何使用它与 DocumentFile。
先感谢您。
解决方案
Uri treeUri = data.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(MainActivity.this, treeUri);
DocumentFile documentFile = pickedDir.findFile("Note");
if (documentFile == null)
documentFile = pickedDir.createFile("text/plain", "Note");
OutputStream out = getContentResolver().openOutputStream(documentFile.getUri());
out.write(infos.get(i).getContent().getBytes());
out.flush();
out.close();
推荐阅读
- javascript - 根据 WooCommerce 订单接收页面中应用的优惠券创建重定向
- c# - 从 c# 应用程序向 slack 发布消息
- julia - 在 Atom 上安装 Julia
- apache-flink - 在 Flink Standalone Cluster 中运行多个 Flink 程序 (v1.4.2)
- javascript - 在 node/js 中,如何显示在浏览器窗口中获取的文本文件?
- javascript - 背景颜色在手机上消失
- javascript - 如何使用 google 地方和 javascript API 循环浏览其他页面?
- android - 两个布局文件显示未知符号
- python - 具有“受保护的操作系统文件”属性的文件仍然可见
- reactjs - 静态托管 - 使用 Azure CDN 在 Azure Blob 存储上的 ReactJS 应用