我注意到输出流类(缓冲输出流)的行为,并且我想了解它来解决我的问题,当我创建一个对象以在文件中写入文本数据时可以,但是尝试再次使用的另一个对象进行写时相同的类工作正常,但用新的替换以前的文本

class writeFile extneds BufferedOutputStream{
  public static void main(String arg[]) throws FileNotFoundException, IOException
{

    new writeFile(new FileOutputStream(file)).setComments("hello");
    new writeFile(new FileOutputStream(file)).setComments("Hi");

}

   public void setComments(String s) throws IOException
   {
       this.write(this.setBytes(s+"\r\n\n"));
    this.write(this.setBytes("-----------------------------------\r\n\n"));
   }


当执行它时,我发现只是一个Hi词,而第一个词不在那儿,因为它被最后一个词取代了,为什么当我使用另一个对象来写一些文本时,它从头开始写并在其之前替换,并且有什么解决方法,因为当我关闭时程序并再次打开它将是对象的新声明,这被视为新对象

最佳答案

有一个FileOutputStream(String, boolean)构造函数,其中第二个参数要附加。我看到的最简单的修复方法是更改

new writeFile(new FileOutputStream(file)).setComments("Hi");




new writeFile(new FileOutputStream(file, true)).setComments("Hi");


我个人认为,最好使用一个OutputStream(而您的writeFile是此类的一种可能)。而且您应该始终close您的资源(可以使用try-with-resources)。最后,Java命名约定的类以大写字母开头-writeFile看起来像方法名称。

try (writeFile fos = new writeFile(new FileOutputStream(file))) {
    fos.setComments("hello");
    fos.setComments("Hi");
}

10-06 14:59