Java中标准输出/标准错误重定向时,是否有内置方法直接读写终端(tty)?
Java中标准输出/标准错误重定向时,是否有内置方法直接读写终端(tty)?
很遗憾,Java并没有提供专门的内置API来直接绕过被重定向的标准流,直接写入用户的tty终端。
你提到的System.console()确实是个备选思路,但正如你发现的那样,当标准输入输出被重定向后,这个方法会返回null,根本没法用来实现直接写tty的需求。
目前最可行的方案就是你正在用的——手动打开/dev/tty这个特殊设备文件来写入。虽然这个写法比System.out.println()繁琐一些,但确实能保证内容直接输出到终端,不受标准流重定向的影响。
另外给你提个小优化建议:用Java的try-with-resources语法来简化代码,它会自动帮你关闭资源,避免手动close可能带来的遗漏:
try (FileWriter tty = new FileWriter("/dev/tty", true)) { tty.write("This will always appear in the tty.\n"); tty.flush(); } catch (Exception e) { // 可以根据实际需求添加异常处理,比如记录错误日志 e.printStackTrace(); }
需要注意的是,这种方式只适用于类Unix系统(比如Linux、macOS),因为/dev/tty是这类系统特有的终端设备文件。如果你的程序需要兼容Windows,那得单独处理Windows下的CON设备文件。
备注:内容来源于stack exchange,提问作者merlin2011
相关产品推荐
相关产品推荐

