system.out和system.err之间的区别

9
据我所知,out和err都属于同一类PrintStream。有人能告诉我它们有什么不同吗?它们是如何改变行为的?

http://en.wikipedia.org/wiki/Standard_streams - stacker
4个回答

13

区别不明显的原因是因为大多数操作系统默认将它们写入控制台(同一文件,控制台也是一个文件)。但是,你可以让System.out写入一个文件,而System.err写入控制台(监视器)——这仅是其中一种场景。

编写一个程序,输出System.outSystem.err信息,然后尝试以下操作:

java MyProgram > out.txt 2> err.txt # On a *NIX.

System.out的消息将会被重定向到out.txt文件,System.err的消息将会被重定向到err.txt文件。需要记住的基本点是将System.out和System.err视为流(它们实际上就是这样的)而不是输出到显示器的机制,这是我作为初学者的错误假设。


3

它们分别进入系统的stdout和stderr流。在大多数操作系统上,它们是不同的,并且可以发送到不同的位置。例如,如果您的程序输出需要由另一个程序解析,那么这可能很有用-如果它需要报告错误,则stderr通常是更好的位置,因为您可能已经设置了它以引起人类的注意。


2
他们有相同的行为。但是第一个(out)是标准输出流的引用(默认情况下是控制台)。第二个(err)是标准错误流的引用(默认情况下也是控制台)。
但如果你想,你可以更改引用,或者为它们每个都添加包装器/过滤器。
例如,我的IDE将来自 err 流的输出显示为红色。

0

System.out将输出发送到标准输出流。System.err将输出发送到标准错误流。 默认情况下,这两个都写入控制台。

然而,好处在于这两个流可以被重定向,因此您可以将system.out输出重定向到普通日志文件,将System.err输出重定向到错误日志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接