【问题标题】:How to rewrite DocumentFile如何重写文档文件
【发布时间】:2018-08-15 08:12:30
【问题描述】:

我想让用户选择文件夹,我的应用会在这个文件夹中创建一个文件。所以我使用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 一起使用。

提前谢谢你。

【问题讨论】:

  • 是的,您正在自己创建该文件。删除该代码。该文件存在。所以使用OutputStream out = getContentResolver().openOutputStream(data.getData()); 。你也不要太用DocumentFile的东西。
  • 哦,对不起,我忘了说 treeUri 是一个文件夹,而不是一个文件
  • 然后使用pickDir.findFile()查看文件是否存在。并使用该uri。仅当文件不存在时才使用 createFIle() ,否则您会得到另一个文件,如您所见。如果文件不存在,findFile() 将返回 null。
  • 好的,我按照你说的做了。但也许还有另一种不删除的方法..
  • 你不应该删除。你应该使用它的uri。我之前说过。

标签: java android uri outputstream documentfile


【解决方案1】:
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();

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 2023-02-05
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2019-08-14
    • 1970-01-01
    相关资源
    最近更新 更多