重置标准输出流

问题描述:

我知道有在Java函数使用System.setOut方法标准输出流设置到任何用户定义的值..重置标准输出流

但有复位标准输出到一个这是任何方法先存储还是标准输出?

您可以通过FileDescriptor.out获得标准输出的文件描述符。要重置标准输出打印到控制台,你做

System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out))); 

另一种方法是简单地坚持原来的对象,如下所示:

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

// ... 

System.setOut(stdout);     // reset to standard output 

这是一个老问题,但它变成了在谷歌搜索中,我想改正它。你可以通过使用FileDescriptor类来获得它。调用new PrintStream(new FileOutputStream(FileDescriptor.out)))应该会给你一些打印到标准输出的东西。

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?"); 
} 
+0

如何走到这是不是upvoted更多... – Jas 2013-12-24 10:38:31

+1

你能澄清,如果接受的答案是不正确(即,如果'System.setOut(标准输出);'按预期工作)?您的方法是否有益于简单存储原始流?另外,我注意到'System.out'等都被标记为'final',好奇你是否可以提供有关Java如何处理'setOut()'的内幕。 – dimo414 2014-06-09 04:51:34

+1

'System.out'和'System.err'由底层本机C代码处理。它们被标记为“final”,以便在虚拟机的本地部分“注意到它们”时不改变它们的指针值。提供的'setOut()'方法需要让本地部分调整其内部引用。 – ksmonkey123 2014-11-24 10:01:33