我需要执行"时间"命令在命令提示符下使用java。问题在于,在显示时间后,它要求设置新的时间。我可以执行" dir"等命令。或者" cd"或" ver"一般。但那些要求用户输入的命令,例如" date"或"时间"无法完全执行。这是代码:
try {
Process p = Runtime.getRuntime().exec("cmd /c time");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
} catch (IOException e1) {} catch (InterruptedException e2) {}
我怀疑由于cmd要求输入,因此它无法被InputStream读取,因为它认为流尚未结束,因此程序永远不会停止执行。 所以,我正在寻找的是一种进入新时间的方式,当它要求我然后打印输出时,如果有的话。
答案 0 :(得分:1)
如果您唯一关心的是第一个输出,那么您不应该等待该过程退出(p.waitFor()
),而是继续获取输入流并读取该行。代码如下。
try {
String [] commands = {"cmd.exe","/C","time"};
Process p = Runtime.getRuntime().exec(commands);
OutputStream out = p.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = reader.readLine(); // read the first line
System.out.println(line);
// write to ouput
out.write("sample".getBytes());
out.flush();
line = reader.readLine();
System.out.println(line);
line = reader.readLine();
System.out.println(line);
p.destroy();
} catch (IOException e1) {}