如果输入是交互式的,即从控制台输入,我想打印一个命令提示符,例如“>”

但是如果它被重定向例如从文件中,然后我不想提示。

System.in是一个抽象InputStream,它似乎对此没有任何方法。

如果具体类型不同,也许可以使用instanceof?

同样,如果System.out重定向到文件,我也不想提示

最佳答案

AFAIK,无法在纯Java中做到这一点,即使在JNI/JNA中做到也很复杂。

一种替代方法是使用JDK 1.6中引入的新控制台API。这使您可以尝试获取控制台的读取器/写入器。如果成功,就可以保证结果是交互式的……按照您的意思。

第二种选择是检查用于启动应用程序的包装脚本中的常规工作,然后通过系统属性将信息传递给Java。例如,在GNU/Linux系统上,可以使用tty(1)命令来判断stdin是否已连接到“tty”设备。

10-07 19:33