Java:System.out和System.err输出到同一个流?

时间:2012-12-21 01:05:02

标签: java

使用System.out.printlnSystem.err.println时有什么区别?在控制台应用程序中,它们似乎几乎相同。

有没有办法改变这个?

4 个答案:

答案 0 :(得分:2)

差异在底层操作系统中定义。默认情况下,这两个流都将发送到控制台(即您的监视器)。但是,用户可以单独重定向它们。例如,在类似Unix的环境中,java MyClass > output.txt会将System.out重定向到文件output.txt,但发送到System.err的任何内容仍会转到控制台。有关详情,您可以google stdoutstderr;这些是大多数操作系统上这些流的典型名称。

答案 1 :(得分:1)

这里明确界定了差异:

http://docs.oracle.com/javase/6/docs/api/java/lang/System.html

还有一些方法(您可以在本文档中找到)定义如何更改这些流(System.setErr,System.setOut,System.setIn)

答案 2 :(得分:1)

System.out是标准输出,System.err是错误输出。

  • 某些IDE控制台以标准字体显示System.out,红色显示System.out

  • Java Web服务器会将错误发送到两个不同的文件。

  • 使用命令行java -jar yourjar.jar >out.txt 2>err.txtSystem.out发送至out.txt,将System.err发送至err.txt

答案 3 :(得分:0)

除了这里的其他人所说的,因为它们是两个独立的流,并发系统中的线程交错可能会导致打印命令让您惊讶,如果您可以互换使用它们。它只取决于操作系统在告诉处理器做什么时优先考虑它们。