重置标准输出流

Mah*_*pta 45 java io

我知道Java中有一个函数可以使用System.setOut方法将标准输出流设置为任何用户定义的值.

但有没有任何方法可以将标准输出重置为先前存储的输出或标准输出的标准输出?

aio*_*obe 80

您可以获取标准输出的文件描述符FileDescriptor.out.要重置标准输出以打印到控制台,您可以

System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
Run Code Online (Sandbox Code Playgroud)

另一种方法是简单地保持原始对象,如下所示:

PrintStream stdout = System.out;
System.setOut(new PrintStream(logFile));

// ...

System.setOut(stdout);                   // reset to standard output
Run Code Online (Sandbox Code Playgroud)


小智 25

这是一个老问题,但它一直出现在谷歌搜索中,我想纠正它.你可以通过使用这个FileDescriptor类来实际获得它.调用new PrintStream(new FileOutputStream(FileDescriptor.out)))应该给你一些打印到stdout的东西.

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;


public static void main(String [] args) {
    System.err.println("error.");
    System.out.println("out.");
    System.setOut(System.err);
    System.out.println("error?");
    System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
    System.out.println("out?");
}
Run Code Online (Sandbox Code Playgroud)

  • 您能否澄清所接受的答案是否不正确(例如,System.setOut(stdout);是否按预期工作)?与仅存储原始流相比,您的方法有好处吗?另外,我注意到System.out等都标记为final,很好奇您是否可以深入了解Java如何处理setOut()。 (2认同)