2011-10-05 45 views
2
import java.io.*; 
class demo 
{ 
public static void main(String args[]) 
{ 
    PrintWriter pw=new PrintWriter(System.out); 
    pw.println("java"); 
    //pw.print("java"); 
} 
} 

//輸出爲java使用pw.println但使用pw.print即沒有同時使用print被印在控制檯輸出爲null。的PrintWriter在java中給人意外的行爲

+0

你確定這是不是隻是你的shell從你「隱藏」了,因爲程序不回顯換行符?您可以嘗試將輸出傳輸到文件以檢查是否發生這種情況。 –

回答

6

試試這個:

PrintWriter pw=new PrintWriter(System.out); 
pw.print("java"); 
pw.flush(); 

PrintWriter將被做內部緩衝,而println方法被自動沖洗它。

+0

但爲什麼下面的代碼不起作用:PrintWriter pw = new PrintWriter(System.out,true); pw.print(「java」); –

+0

如果您查看javadoc(http://download.oracle.com/javase/1.4.2/docs/api/java/io/PrintWriter.html),您會看到「如果啓用自動刷新功能,它將會只有在調用println()方法之一時才進行,而不是每當發生換行符輸出時。 所以,讓它做你想做的事情的唯一方法是實際調用'flush()' – stevevls

+0

ok thanx尋求幫助 –

6

這幾乎肯定只是緩衝 - 而且當你不沖洗它時,你永遠不會得到輸出。從the docs

不像的PrintStream類,如果啓用自動刷新,一定會完成,只有當的的println,printf或format方法調用其中一個,而不是當一個換行符恰好是輸出。這些方法使用平臺自己的行分隔符而不是換行符。

嘗試:

pw.flush(); 

在碼的末尾。

0

println()的調用隱式刷新輸出緩衝區,而對print()的調用則不會。嘗試使用print(),然後致電pw.flush()

還要注意的是PrintWriter的構造函數包含一個在任何寫入調用後自動刷新的選項。

1

對於自動沖水,您可以使用此構造

PrintWriter(OutputStream out, boolean autoFlush); 
+0

嘗試過但沒有與pw.print(「java」)一起工作 –

+0

你將autoFlush設置爲true? – Mansuro

+0

你試過這個:PrintWriter pw = new PrintWriter(System.out,true); pw.print( 「Java」 的);但沒有解決方案 –