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