上下文:
- 我有一个简单的程序,其中有一堆
System.out.println()
来电 - 根据命令行参数,我要么将标准发送到 控制台或文件
- 我还有一个非常基本的
Debug
类Debug.print()
当我的程序出现问题时,我使用调用将调试信息打印到控制台
问题:
我从来不想要Debug.print()
调用发送到文件,这对我来说只是临时信息。当然,当我将标准输出重定向到文件时,调试信息也会发送到那里
尝试的解决方案:
- 我尝试将 java.io.Console 与
System.console().writer().println()
一起使用但它返回NullPointerException
当标准输出按照 javadocs 中的指定进行重定向时。 - 我尝试的另一种方法是在重定向标准输出之前将控制台“保存”在变量中。如果我在执行重定向的类中执行此操作,则效果很好,但是在
Debug
中执行此操作。类,我无法确定在我设置控制台变量时有人尚未重定向标准输出...
问题:
无论标准输出在做什么,是否有任何简单的方法可以写入java控制台?
最佳答案
您始终可以通过创建新的 FileOutputStream
来写入 JVM 进程的 stdout 句柄。引用out
处理。如果您想拥有与 System.out
相同的功能,只需将其包装成 PrintWriter
:
PrintStream oldOut=new PrintStream(new FileOutputStream(FileDescriptor.out));
oldOut.println("I ignore whether System.out has been redirected");
这只会绕过 JVM 中使用 System.setOut(…);
设置的内容。 。如果进程本身的标准输出已被重定向,例如使用>
在命令行上,这没有帮助。
关于java - 如果您已经重定向标准输出,是否可以访问控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021352/