使用Java从BAT文件获取输出

时间:2013-06-12 08:47:01

标签: java networking windows-7 process runtime.exec

我正在尝试运行.bat文件并获取输出。我可以运行它,但我无法在Java中获得结果:

String cmd = "cmd /c start C:\\workspace\\temp.bat";

Runtime r = Runtime.getRuntime();
Process pr = r.exec(cmd);

BufferedReader stdInput = new BufferedReader(
    new InputStreamReader( pr.getInputStream() ));

String s ;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

结果是null。不知道我为什么会这样。请注意,我使用的是Windows 7。

3 个答案:

答案 0 :(得分:4)

使用“cmd / c start [...]”运行批处理文件将创建一个子进程,而不是直接运行批处理文件。

因此,您将无法访问其输出。 为了使它工作,你应该使用:

String cmd = "C:\\workspace\\temp.bat";

它适用于Windows XP。

答案 1 :(得分:3)

在调用process.waitFor()后,您需要启动一个新线程来读取终端输出流并将其复制到控制台。

做类似的事情:

String line;
Process p = Runtime.getRuntime().exec(...);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
    System.out.println(line);
}
input.close();

更好的方法是使用ProcessBuilder类,并尝试编写类似的内容:

ProcessBuilder builder = new ProcessBuilder("/bin/bash");
builder.redirectInput();
Process process = builder.start();

while ((line = reader.readLine ()) != null) {
    System.out.println ("Stdout: " + line);
}

答案 2 :(得分:-1)

BufferedReader stdInput = new BufferedReader(new 
 InputStreamReader( pr.getErrorStream() ));

改为使用

BufferedReader stdInput = new BufferedReader(new 
 InputStreamReader( pr.getInputStream ));