gpt4 book ai didi

java - 如果您已经重定向标准输出,是否可以访问控制台?

转载 作者:行者123 更新时间:2023-11-30 06:18:46 24 4
gpt4 key购买 nike

上下文:

  • 我有一个包含一堆 System.out.println() 调用的简单程序
  • 根据命令行参数,我要么将标准发送到控制台或文件
  • 我还有一个非常基本的 Debug 类,带有一个 Debug.print() 调用,当我的程序出现问题时,我用它来将调试信息打印到控制台

问题:

我从不想将 Debug.print() 调用发送到文件,这对我来说只是临时信息。当然,当我将标准输出重定向到文件时,调试信息也会发送到那里

尝试的解决方案:

  1. 我尝试将 java.io.Console 与 System.console().writer().println() 结合使用,但当标准输出被重定向时它会返回一个 NullPointerException如 javadoc 中所指定。
  2. 我尝试的另一种方法是在重定向标准输出之前将控制台“保存”在一个变量中。如果我在执行重定向的类中执行此操作,则效果很好,但在 Debug 类中,我无法确定在我设置控制台时是否有人尚未重定向标准输出变量...

问题:

无论标准输出在做什么,是否有任何简单的方法可以写入 java 控制台?

最佳答案

您始终可以通过创建一个引用 out 句柄的新 FileOutputStream 来写入 JVM 进程的 stdout 句柄。如果你想拥有与 System.out 相同的功能,只需将其包装到 PrintWriter 中即可:

PrintStream oldOut=new PrintStream(new FileOutputStream(FileDescriptor.out));
oldOut.println("I ignore whether System.out has been redirected");

这只会绕过使用 System.setOut(...); 在 JVM 中设置的内容。如果进程本身的标准输出已被重定向,例如在命令行上使用 >,这不会有帮助。

关于java - 如果您已经重定向标准输出,是否可以访问控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com