如果输入是交互式的,即从控制台输入,我想打印命令提示符,例如“>” 中
但如果重定向,例如从一个文件,然后我不想提示。
System.in是一个抽象的InputStream,似乎没有任何方法。
如果具体类型不同,也许你可以使用instanceof?
同样,如果将System.out重定向到文件,我也不想提示
答案 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();
}
}
}