java中的PrintWriter给出了意想不到的行为

时间:2011-10-05 13:21:21

标签: java io printwriter

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时控制台上没有任何内容打印。

4 个答案:

答案 0 :(得分:6)

几乎可以肯定只是缓冲 - 而且你没有冲洗它,你永远不会得到输出。来自the docs

  

与PrintStream类不同,如果启用了自动刷新,则只有在调用println,printf或format方法之一时才会执行,而不是每当输出换行符时。这些方法使用平台自己的行分隔符概念而不是换行符。

尝试:

pw.flush();

在代码的末尾。

答案 1 :(得分:6)

请改为尝试:

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

PrintWriter将进行内部缓冲,println方法会自动刷新它。

答案 2 :(得分:1)

对于自动刷新,您可以使用此构造函数

PrintWriter(OutputStream out, boolean autoFlush);

答案 3 :(得分:0)

println()的调用会隐式刷新输出缓冲区,而对print()的调用则不会。尝试使用print(),然后拨打pw.flush()

另请注意,PrintWriter的构造函数包含一个在任何写入调用后自动刷新的选项。