FileOutputStream是否截断现有文件

Rae*_*ald 9 java file

是否

 final OutputStream output = new FileOutputStream(file);
Run Code Online (Sandbox Code Playgroud)

截断file它是否已经存在?令人惊讶的是,Java 6API文档没有说明.Java 7API文档也没有.语言本身规范FileOutputStream类的语义无关.

我知道

 final OutputStream output = new FileOutputStream(file, true);
Run Code Online (Sandbox Code Playgroud)

导致附加到文件.但附加和截断不是唯一的可能性.如果将100个字节写入1000字节文件,则有一种可能性是最终的900字节保持不变.

ths*_*ths 7

FileOutputStream没有该append选项截断文件.

请注意,FileOutputStream打开一个Stream,而不是一个随机访问文件,所以我想它的行为方式确实有意义,尽管我同意文档可以更加明确.

  • 我的意思是 FileOutputStream 在没有附加选项的情况下截断文件的声明的来源。我对 Java 中 Stream 的语义不太有信心,据我所知,它也可能是写入文件,并保留文件末尾未修改。即,例如,您将 200 字节写入 800 字节长的现有文件,导致未修改尾随的 600 字节。我不明白为什么这本身没有意义。 (2认同)

Bas*_*sen -3

FileOutputStream旨在写入二进制数据,该数据通常会被覆盖。

如果您正在操作文本数据,您最好使用FileWriter具有方便append方法的方法。