如果输入是交互式的,即来自控制台,我想打印一个命令提示符,例如“>”
但是如果它被重定向,例如来自文件,那么我不想提示。
System.in 是一个抽象的 InputStream,它似乎没有任何方法。
如果具体类型不同,也许您可以使用 instanceof?
同样,如果 System.out 被重定向到一个文件,我也不想提示
最佳答案
AFAIK,没有办法在纯 Java 中执行此操作,即使在 JNI/JNA 中执行也会很复杂。
替代方法可能是使用 JDK 1.6 中引入的新控制台 API。这允许您尝试为控制台获取读取器/写入器。如果成功,则保证结果是交互式的……就您的意思而言。
第二种选择是在用于启动应用程序的包装器脚本中执行“检查交互性”,并通过系统属性将信息传递给 Java。例如,在 GNU/Linux 系统上,tty(1)
命令可用于判断 stdin 是否连接到“tty”设备。
请注意,还有其他方法可以处理在非交互式运行时避免不需要的提示的要求:
If System.out is redirected to a file I also do not want to prompt.
(我想你的意思可能是 System.in
被重定向了。这是以非交互方式运行通常需要用户交互输入的应用程序的正常方式...)
备选方案包括:
您可以修改程序以将提示写入(比如)
System.err
并将其重定向到其他位置。您可以修改程序以包含“不提示”或“从文件中获取输入”的选项。
关于java - 有没有办法确定 Java System.in 是否为 "interactive"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413552/