如果输入是交互式的,即从控制台输入,我想打印命令提示符,例如">"
但如果它被重定向,例如从文件中重定向,那么我不想提示.
System.in是一个抽象的InputStream,似乎没有任何方法.
如果具体类型不同,也许你可以使用instanceof?
同样,如果将System.out重定向到文件,我也不想提示
AFAIK,在纯 Java 中没有办法做到这一点,甚至在 JNI / JNA 中做到这一点也会很复杂。
另一种方法可能是使用 JDK 1.6 中引入的新控制台 API。这允许您尝试获取控制台的读取器/写入器。如果成功,结果肯定是交互式的......就你的意思而言。
第二种选择是在用于启动应用程序的包装器脚本中执行“检查交互性”,并通过系统属性将信息传递给 Java。例如,在 GNU/Linux 系统上,该tty(1)命令可用于判断 stdin 是否连接到“tty”设备。
请注意,还有其他方法可以处理要求,以避免在非交互式运行时出现不需要的提示:
如果 System.out 被重定向到一个文件我也不想提示。
(我想你的意思可能System.in是重定向。这是非交互式运行应用程序的正常方式,该应用程序通常需要用户的交互式输入......)
替代方案包括:
您可以修改程序以将提示写入(例如)System.err并将其重定向到不同的位置。
您可以修改程序以具有表示“不提示”或“从文件获取输入”的选项。
| 归档时间: |
|
| 查看次数: |
1950 次 |
| 最近记录: |