2014-10-07 192 views
1

我有一個小問題,我做了一個函數。 我希望每次給這個函數一個字符串時,它會把我保存到同一個文件中的一個新行中,但實際上現在只保存最後一個字符串Im的活動。這就像一遍又一遍的重寫,需要一些幫助BufferedOutputStream多行寫入文件

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。

任何ideeas如何做到這一點?謝謝ypu

+0

如果您執行新的FileOutputStream(newFile,true)來告訴它追加而不是重寫,會發生什麼? – ControlAltDel 2014-10-07 19:28:38

+0

使用BufferedOutputStream時,在關閉它之前,還應該使用'out.flush()'。 – Ascalonian 2014-10-07 19:30:04

+0

@Ascalonian如果關閉(),則不需要flush()。 – eckes 2014-10-07 19:31:45

回答

2

你完全正確,你覆蓋文件。如果你用FileOutputStream打開它,它將從頭開始。您可以通過在文件(名稱)後指定true來保持數據流處於打開狀態或使用append mode

BufferedOutputStream out = new BufferedOutputStream(
           new GZIPOutputStream(
             new FileOutputStream(newFile, true) 
            ) 
           ); 

與你有相當一些開銷,如果你打開每行一個新的流GZIPOutputStream,但它被定義爲以這種方式工作。 (再次強調:保持開放也有助於此)。

+0

謝謝你,那曾經工作過:D:D。我忘了這種模式。再次感謝你! – Nicholas 2014-10-07 19:32:52

+2

在6分鐘內,我會將其標記爲答案 – Nicholas 2014-10-07 19:34:49