如果输入是交互式的,即从控制台输入,我想打印一个命令提示符,例如“>”
但是如果它被重定向例如从文件中,然后我不想提示。
System.in是一个抽象InputStream,它似乎对此没有任何方法。
如果具体类型不同,也许可以使用instanceof?
同样,如果System.out重定向到文件,我也不想提示
最佳答案
AFAIK,无法在纯Java中做到这一点,即使在JNI/JNA中做到也很复杂。
一种替代方法是使用JDK 1.6中引入的新控制台API。这使您可以尝试获取控制台的读取器/写入器。如果成功,就可以保证结果是交互式的……按照您的意思。
第二种选择是检查用于启动应用程序的包装脚本中的常规工作,然后通过系统属性将信息传递给Java。例如,在GNU/Linux系统上,可以使用tty(1)
命令来判断stdin是否已连接到“tty”设备。