Java 缓冲输出流多行写入文件

Java 缓冲输出流多行写入文件,java,bufferedwriter,gzipoutputstream,bufferedoutputstream,Java,Bufferedwriter,Gzipoutputstream,Bufferedoutputstream,我做的一个函数有点问题。 我希望每次我给这个函数一个字符串,它都会将我保存到同一个文件中的一个新行,但实际上现在只保存我所给的最后一个字符串。这就像一次又一次的覆盖,需要一些帮助吗 public void WritingGZFile(String directory, String linesWithPattern, String newFile) throws IOException { newFile = directory + '\\' + newFile;

我做的一个函数有点问题。 我希望每次我给这个函数一个字符串,它都会将我保存到同一个文件中的一个新行,但实际上现在只保存我所给的最后一个字符串。这就像一次又一次的覆盖,需要一些帮助吗

public void WritingGZFile(String directory, String linesWithPattern, String newFile) throws IOException
    {
        newFile = directory + '\\' + newFile;
            BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(
                    newFile)));
            out.write(linesWithPattern.getBytes());
            out.write("\r\n".getBytes());
            out.close();
    }
例如,在BufferedWriter中,有一个名为newLine的方法可以帮助实现这一点

但是因为我想使用GZIPOutputStream类,所以我需要BufferedOutputStream


你知道怎么做吗?谢谢ypu

您完全正确,您覆盖了该文件。如果使用
FileOutputStream
打开它,它将从头开始。您可以通过在文件(名称)后指定
true
来保持流的打开状态或使用


使用GZIPOutputStream,如果您在每一行上打开一个新的流,您会有相当大的开销,但是它被定义为以这种方式工作。(同样:保持它打开也有帮助)。

如果您使用new-FileOutputStream(newFile,true)命令它追加而不是重写会发生什么?当使用BufferedOutputStream时,您还应该在关闭它之前使用
out.flush()
。@Ascalonian如果
close()
@ControlAltDel这是正确的解决方案。顺便说一句:使用string.getBytes()是危险的,因为它没有定义要使用的编码。你最好指定一个(通常是UTF-8)或使用一个可以直接获取字符串的编写器(并在编写器中指定编码)。谢谢你,伙计,这很有效:D:D。我忘记了这个模式。再次感谢你!
BufferedOutputStream out = new BufferedOutputStream(
                                 new GZIPOutputStream(
                                       new FileOutputStream(newFile, true)
                                     )
                                );