java getRuntime().exec()对于运行基本cmd命令不起作用
问题描述:
我试图使用getRuntime().exec()运行cmd命令。问题是,它只能如果我的命令字符串是IPCONFIG,而如果我尝试像Java运行命令-version或时间,它然后引发错误:java getRuntime().exec()对于运行基本cmd命令不起作用
产生java.io.IOException:不能运行程序 “时间”:CreateProcess的错误= 2,系统找不到指定的文件
String command = "time";
Process p;
try {
p = Runtime.getRuntime().exec(command);
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
//System.out.println(line);
textField_1.setText(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答
我通过使用ProcessBuilder
解决了此问题。我仍然不知道为什么早期的代码不适用于所有的命令。但通过使用ProcessBuilder
,我能够执行任何cmd
查询。
下面是引用代码:
String command_ping = "ping " + host_name;
try {
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", command_ping);
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer buffer = new StringBuffer();
String line = "";
while (true)
{
buffer.append(line).append("\n");
line = r.readLine();
if (line == null) { break; }
}
message_ping= buffer.toString();
p.waitFor();
r.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
*系统找不到指定的文件*,所以也许不是你的道路? –
“time”命令是否在你的'cmd'中工作? –
因为包含java程序的文件夹不在您的环境路径中。将其添加到路径中或指定java命令的绝对路径。您可以在运行时评估一个属性,而不是在代码中对其进行硬编码。 – davidxxx