有没有办法确定Java System.in是否是“交互式的”?

时间:2010-03-10 00:02:34

标签: java

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

但如果重定向,例如从一个文件,然后我不想提示。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

另一种方法可能是使用JDK 1.6中引入的新Console API。这允许您尝试获取控制台的读取器/写入器。如果成功,结果将保证是互动的......就你的意思而言。

第二种方法是检查用于启动应用程序的包装器脚本中的legwork,并通过系统属性将信息传递给Java。例如,在GNU / Linux系统上,tty(1)命令可用于判断stdin是否连接到“tty”设备。

答案 1 :(得分:-2)

您可以将其设为互动:

public static void main(String args[]) throws Exception {
    String action = null;
    Scanner in = new Scanner(System.in);

    while (!((action = in.nextLine()).equalsIgnoreCase("exit"))) {
        if (action.equalsIgnoreCase("open")) {
            openConnections();
        } else if (action.equalsIgnoreCase("close")) {
            closeConnections();
        }
    }
}