Java 覆盖而不是追加数据的FileOutputStream(FileDescriptor)?

Java 覆盖而不是追加数据的FileOutputStream(FileDescriptor)?,java,android,Java,Android,我通过一个FileOutputStream写入一个文件,该文件通过其构造函数以FileDescriptor打开 我想要的行为:当我写入文件时,我希望它是唯一的内容。例如,写入“Hello”应导致文件仅包含“Hello” 实际行为:每次我写东西时,它都只是简单地出现。在上面的例子中,我会得到“HelloHello” 我如何像Im那样打开FileOutputStream,而不让它处于追加模式? 注意:我被迫使用FileDescriptor。如果使用FileOutoutStream,则ctor会提供

我通过一个
FileOutputStream
写入一个文件,该文件通过其构造函数以
FileDescriptor
打开

我想要的行为:当我写入文件时,我希望它是唯一的内容。例如,写入“Hello”应导致文件仅包含“Hello”

实际行为:每次我写东西时,它都只是简单地出现。在上面的例子中,我会得到“HelloHello”


我如何像Im那样打开FileOutputStream,而不让它处于追加模式?


注意:我被迫使用FileDescriptor。

如果使用FileOutoutStream,则ctor会提供一个选项,供您指定是否要打开要追加的文件。如果将其设置为false,则它将起作用

    OutputStream out = null;
    try {
        out = new FileOutputStream("OutFile", false);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
使参数append为false,以便每次调用时都覆盖现有数据


文件输出流输出流

    try {

        outputStream = openFileOutput("your_file", Context.MODE_PRIVATE);
        //Context.MODE_PRIVATE -> override / MODE_APPEND -> append
        outputStream.write("your content");
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

根据ContentProvider.java文件文档,您可以使用“rwt”模式在截断文件时读取和写入文件

ParcelFileDescriptor pfd = context.getContentResolver.openFileDescriptor(uri, "rwt");
FileOutputStream fos = new FileOutputStream(pfd.getFileDescriptor());
@文件的参数模式访问模式。只读访问可能为“r”, “rw”表示读写访问,或“rwt”表示读写访问 它将截断任何现有文件


尽管这个问题很久以前就发布了,但我还是希望这能有所帮助。

谢谢@commonware,我之前也发现了这篇文章,但我决定发布我的问题,希望能有另一种简单地覆盖而不是截断然后再写的方式。我在处理大文件。我认为“简单覆盖”和“截断然后写入”是一样的。这还不清楚。首先,如果要写入的内容大于文件中的当前内容,会发生什么情况?能否显示一个小示例代码,说明如何创建FileDescriptor、打开并写入文件?如果要附加旧数据,可以使用“wa”模式。
ParcelFileDescriptor pfd = context.getContentResolver.openFileDescriptor(uri, "rwt");
FileOutputStream fos = new FileOutputStream(pfd.getFileDescriptor());