【问题标题】:PrintWriter in java giving unexpected behaviourjava中的PrintWriter给出了意外的行为
【发布时间】:2011-12-01 11:49:55
【问题描述】:
import java.io.*;
class demo
{
public static void main(String args[])
{
    PrintWriter pw=new PrintWriter(System.out);
    pw.println("java");
    //pw.print("java");
}
}

// 使用pw.println 时输出为java,但使用pw.print 时输出为空,即使用print 时不会在控制台上打印任何内容。

【问题讨论】:

  • 你确定这不仅仅是你的shell“隐藏”它,因为程序不回显换行符吗?您可以尝试将输出通过管道传输到文件以检查是否发生这种情况。

标签: java io printwriter


【解决方案1】:

对于自动刷新,你可以使用这个构造函数

PrintWriter(OutputStream out, boolean autoFlush);

【讨论】:

  • 您是否将 autoFlush 设置为 true?
  • 是的,我试过这个:PrintWriter pw=new PrintWriter(System.out,true); pw.print("java");但没有解决方案
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    试试这个:

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

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

    【讨论】:

    • 但是为什么下面的代码不起作用: PrintWriter pw=new PrintWriter(System.out,true); pw.print("java");
    • 如果您查看 javadoc (download.oracle.com/javase/1.4.2/docs/api/java/io/…),您会看到“如果启用了自动刷新,它将仅在调用 println() 方法之一时完成,而不是每当换行符恰好被输出。”所以,让它做你想做的事情的唯一方法就是调用flush()
    【解决方案4】:

    几乎可以肯定它只是在缓冲 - 因为你没有刷新它,所以你永远不会得到输出。来自the docs

    与 PrintStream 类不同,如果启用了自动刷新,它将仅在调用 println、printf 或格式方法之一时完成,而不是在碰巧输出换行符时完成。这些方法使用平台自己的行分隔符概念,而不是换行符。

    试试:

    pw.flush();
    

    在代码的末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2016-11-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多