2012-11-01 68 views
1

.write方法被調用後,有沒有辦法讓PrintWriterOutputStreamWriter立即打印?我有autoFlush開啓PrintWriter。然而,對於這兩個類,僅當作者關閉時纔會打印內容。立即打印PrintWriter或OutputStreamWriter

對於它的價值,我使用Writer因爲我需要在抽象控制檯輸出,文件輸出,並且輸出字符串。

謝謝!

編輯:

SSCCE,顯示問題:

import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.util.Scanner; 

public class Main { 
    public static void main(String[] args) { 
     PrintWriter p = new PrintWriter(System.out, true); 
     Scanner read = new Scanner(System.in); 
     while (read.hasNextLine()) { 
      String input = read.nextLine(); 
      if (input.equals("end")) 
       break; 
      p.write(input); 
     } 
     p.close(); 
    } 
} 

/* Sample run: (first four lines are input) 
cow 
mow 
pow 
end 
cowmowpow 
*/ 
+1

請顯示一個簡短但完整的程序來演示問題。 –

+0

既然它是'Writer',爲什麼不直接調用'println()'來立即刷新數據並關閉流呢? –

+0

@JonSkeet,請檢查編輯。 – missingfaktor

回答

5

autoFlush構造函數的參數文檔說:

一個布爾值;如果爲true,println的,printf或format方法將刷新既然你不使用任何這些方法的輸出緩衝

,這並不完全出乎意料,它不是幫助。

最簡單的方法是在write之後手動撥打flush() - 畢竟這就是您要實現的目標。我不知道什麼會在每次寫入後默認刷新寫入器。

當然,您可以編寫自己的包裝類 - 相當於BufferedWriter,但效果相反。它可以將所有方法委託給包裝好的作者,但之後立即調用flush()

+0

這是有效的。謝謝。 :)下次我應該更仔細地閱讀文檔。 – missingfaktor

+0

+1爲解釋喬恩:) – gks

相關問題