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

标签 java redirect console redirectstandardoutput

上下文:

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

问题:

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

尝试的解决方案:

  1. 我尝试将 java.io.Console 与 System.console().writer().println() 一起使用但它返回 NullPointerException当标准输出按照 javadocs 中的指定进行重定向时。
  2. 我尝试的另一种方法是在重定向标准输出之前将控制台“保存”在变量中。如果我在执行重定向的类中执行此操作,则效果很好,但是在 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/

相关文章:

java - Hibernate Search java spring,仅搜索具有指定id的实体

java - Spring CXF Webservice 未正确部署

.htaccess - 除了需要 HTTPS 的 4 个页面外,所有页面都默认为 HTTP 连接

vue.js - 如何使用 Nuxt 中间件重定向到外部站点?

javascript - 如何处理状态 302?

ruby-on-rails - Heroku Rails 控制台不再启动

javascript - 使 Firebug 控制台历史记录在浏览器退出时保留

java - 如何使用 swingx 1.6 突出显示 JTable 中的每隔一行

java - 机器人类 mouseWheel 不工作

C++ 控制台键盘事件