Java 缓冲输出流
我注意到输出流类缓冲输出流的一个行为,我想了解它以解决我的问题,即当我创建一个对象在文件中写入文本数据时,它是正常的,但当尝试使用同一类的另一个对象再次写入时,它工作正常,但用新文本替换以前的文本Java 缓冲输出流,java,Java,我注意到输出流类缓冲输出流的一个行为,我想了解它以解决我的问题,即当我创建一个对象在文件中写入文本数据时,它是正常的,但当尝试使用同一类的另一个对象再次写入时,它工作正常,但用新文本替换以前的文本 class writeFile extneds BufferedOutputStream{ public static void main(String arg[]) throws FileNotFoundException, IOException { new writeFile(ne
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字,第一个字不在那里,因为它被最后一个字替换了。那么,为什么当我使用另一个对象来写一些文本时,它会从头开始写,然后替换为前面的文本呢?有什么解决方案吗?因为当我关闭程序并再次打开它时,它将是对象的新声明,这被认为是新的对象有一个构造函数,其中第二个参数是要追加的。我看到的最简单的解决办法是改变
new writeFile(new FileOutputStream(file)).setComments("Hi");
到
我个人认为,最好使用一个OutputStream,您的writeFile就是这样一个类。你应该关闭你的资源,你可以使用一个。最后,Java命名约定让类以大写字母开头——writeFile看起来像方法名
try (writeFile fos = new writeFile(new FileOutputStream(file))) {
fos.setComments("hello");
fos.setComments("Hi");
}
什么是挫折?为什么要执行BufferedOutputStream?新建文件OutputStreamFile将打开文件进行写入并截断内容。为什么这会让你感到惊讶呢?setBytes是一个将字符串作为参数并将其转换为字节数组的方法,我对它进行了扩展,使用了类中的受保护缓冲区,并在写入之前使用了一些缓冲功能。另外,别忘了正确关闭文件流。非常感谢你,请关闭文件。
try (writeFile fos = new writeFile(new FileOutputStream(file))) {
fos.setComments("hello");
fos.setComments("Hi");
}