是否有Java类来运行Windows批处理文件?例如,启动批处理文件并接收批处理运行的结果?
答案 0 :(得分:1)
Apache Commons Exec是一个很好的方法。解决了使用纯ProcessBuilder或Runtime.exec时遇到的几个问题。
从项目说明:
从Java执行外部进程是一个众所周知的问题领域。它依赖于平台,并且需要开发人员知道并测试特定于平台的行为,例如在Windows上使用cmd.exe或导致死锁的有限缓冲区大小。 JRE对此的支持非常有限,尽管新的Java SE 1.5 ProcessBuilder类更好。
答案 1 :(得分:0)
通常ProcessBuilder
stuff适用于批处理文件,Runtime#exec
也是如此。您正在执行的命令是cmd.exe
,批处理文件名是它的参数。我相信参数序列是cmd.exe
,/c
,batch_file_name
。 (编辑:是的,事实上,我找到了一个question here,这个问题在答案中的SO上重复了。)
答案 2 :(得分:0)
Runtime.getRuntime().exec("cmd /c start batFileName.bat");
应该有效。
但要阅读java进程的输出,请从上面的comman中删除start
。
答案 3 :(得分:0)
是的,据我所知,RunTime classe可以。当然,ProcessBuilder也是如此。我使用Java运行了多个批处理文件。以下是谷歌搜索结果。它具有同样重要的链接
答案 4 :(得分:0)
如果您想使用原生Java而没有第三方软件包,请使用Runtime
和Process
进行尝试。我不是世界上最好的Java编码器,但这应该得到你想要的。可能需要进行一些修改才能添加一个循环来读取输入流中的所有内容。
import java.util.*;
import java.lang.*;
import java.io.*;
public class test
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process batch = rt.exec("test.bat");
batch.waitFor();
//exitValue() contains the ERRORLEVEL from batch file
System.out.println(batch.exitValue());
//getInputStream will get all output from stdout
//getErrorStream will get all error output from stderr
InputStream inStream = batch.getInputStream();
byte[] text = new byte[inStream.available()];
inStream.read(text);
System.out.println(new String(text));
}
catch (IOException ex)
{
}
catch (InterruptedException ex)
{
}
}
}