Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:System.out和System.err输出到同一个流?_Java - Fatal编程技术网

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

Java:System.out和System.err输出到同一个流?,java,Java,使用System.out.println或System.err.println有什么区别?在控制台应用程序中,它们看起来几乎是一样的 有没有办法改变这一点?差异是在底层操作系统中定义的。默认情况下,这两个流都会发送到控制台(即您的监视器)。但是,用户可以独立地重定向它们。例如,在类似Unix的环境中,java MyClass>output.txt将System.out重定向到文件output.txt,但发送到System.err的任何内容仍将转到控制台。有关更多详细信息,您可以在谷歌上搜索std

使用
System.out.println
System.err.println
有什么区别?在控制台应用程序中,它们看起来几乎是一样的


有没有办法改变这一点?

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

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

这里清楚地定义了区别:


对于如何更改这些流(System.setErr、System.setOut、System.setIn),还定义了一些方法(您将在本文档中找到这些方法)

此处明确定义了区别:


对于如何更改这些流(System.setErr、System.setOut、System.setIn),还定义了一些方法(您将在本文档中找到这些方法)

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

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

  • JavaWeb服务器会将err和out发送到两个不同的文件

  • 使用命令行
    java-jar yourjar.jar>out.txt 2>err.txt
    System.out
    发送到
    out.txt
    System.err
    发送到
    err.txt


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

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

    • JavaWeb服务器会将err和out发送到两个不同的文件

    • 使用命令行
      java-jar yourjar.jar>out.txt 2>err.txt
      System.out
      发送到
      out.txt
      System.err
      发送到
      err.txt



    除了这里的其他人所说的,因为它们是两个独立的流,在并发系统中线程的交错可能会导致打印顺序令人惊讶,如果您交替使用它们。这只取决于操作系统在告诉处理器该做什么时如何对它们进行优先级排序。

    除了这里的其他人所说的,因为它们是两个独立的流,并发系统中线程的交错可能会导致打印顺序让您感到惊讶,如果您交替使用它们。这只取决于操作系统在告诉处理器做什么时如何对它们进行优先级排序。

    对于初学者来说,在使用netbeans时,
    system.err
    是红色的。我使用eclipse,但这是标准的吗?我不认为我可以期望每个控制台都以这种方式管理红色输出。首先,当使用netbeans时,
    System.err
    是红色的。我使用eclipse,但这是标准的吗?我不认为我可以期望每个控制台都能以这种方式管理红色输出。Shell重定向不同于设置要使用哪个系统的流。(out | in | err)。@WillC。也许我应该指定这些是默认值。我不知道可以用Java编程设置流。我从来没有这样做过,甚至在看到其他答案后,我也质疑这样做的有用性。我尝试了shell重定向将输出发送到文本文件,两个系统输出都被发送到一个文本文件,那么err发送到日志文件或其他什么呢?@Code Guru在运行时设置输出流的有用性在于,对于所有执行字节码的系统,都有一个一致的流被写入。Shell重定向不同于将流设置到哪个系统。(out | in | err)使用wilc。也许我应该指定这些是默认值。我不知道可以用Java编程设置流。我从来没有这样做过,甚至在看到其他答案后,我也质疑这样做的有用性。我尝试了shell重定向将输出发送到文本文件,两个系统输出都被发送到一个文本文件,那么err发送到日志文件或其他什么呢?@Code Guru在运行时设置输出流的有用性在于,对于所有执行字节码的系统,都有一个一致的流被写入。API文档的链接为+1。为完整起见,以下是Java 7的文档:。(当然,系统类的这一部分没有改变,所以这可能不是问题。)+1用于API文档的链接。为完整起见,以下是Java 7的文档:。(当然,系统类的这一部分没有改变,所以这可能不是问题。)