在 java 中执行 .bat 文件的方式主要有以下几种:
一、使用 runtime.getruntime().exec()
这是最原始的 java 执行外部命令的方式。
maven 依赖(无需额外依赖)
<!-- 标准 java api,无需引入额外依赖 -->
示例代码
public class batexecutor {
public static void main(string[] args) {
try {
process process = runtime.getruntime().exec("cmd /c start cmd.exe /c your-script.bat");
int exitcode = process.waitfor();
system.out.println("exit code: " + exitcode);
} catch (exception e) {
e.printstacktrace();
}
}
}
二、使用 processbuilder
更现代和推荐的方式,支持设置环境变量、工作目录等。
maven 依赖(无需额外依赖)
<!-- 标准 java api,无需引入额外依赖 -->
示例代码
import java.io.ioexception;
public class batwithprocessbuilder {
public static void main(string[] args) {
try {
processbuilder pb = new processbuilder("cmd.exe", "/c", "your-script.bat");
pb.redirecterrorstream(true); // 合并标准输出与错误输出
process process = pb.start();
int exitcode = process.waitfor();
system.out.println("exit code: " + exitcode);
} catch (ioexception | interruptedexception e) {
e.printstacktrace();
}
}
}
三、使用 apache commons exec(第三方库)
提供了更高级的 api 来处理执行过程中的输入/输出流、超时、退出码验证等。
maven 依赖
<dependency>
<groupid>org.apache.commons</groupid>
<artifactid>commons-exec</artifactid>
<version>1.3</version>
</dependency>
示例代码
import org.apache.commons.exec.*;
import java.io.ioexception;
public class batwithapacheexec {
public static void main(string[] args) {
commandline cmdline = new commandline("cmd");
cmdline.addargument("/c");
cmdline.addargument("your-script.bat");
defaultexecutor executor = new defaultexecutor();
executor.setexitvalue(0);
pumpstreamhandler streamhandler = new pumpstreamhandler(system.out, system.err);
executor.setstreamhandler(streamhandler);
try {
int exitcode = executor.execute(cmdline);
system.out.println("exit code: " + exitcode);
} catch (ioexception e) {
e.printstacktrace();
}
}
}
四、使用 processhandle(java 9+)
适用于需要获取子进程 pid 或监听进程状态的场景。
maven 依赖(无需额外依赖)
<!-- 标准 java api,无需引入额外依赖 -->
示例代码
import java.io.ioexception;
public class batwithprocesshandle {
public static void main(string[] args) {
try {
processbuilder pb = new processbuilder("cmd.exe", "/c", "your-script.bat");
process process = pb.start();
processhandle handle = process.tohandle();
system.out.println("process pid: " + handle.pid());
boolean finished = handle.onexit().tocompletablefuture().isdone();
if (finished) {
system.out.println("process exited.");
}
} catch (ioexception e) {
e.printstacktrace();
}
}
}
总结对比
| 方法 | 是否需要依赖 | 控制能力 | 推荐程度 |
|---|---|---|---|
| runtime.exec() | ❌ 不需要 | 基础 | ⭐⭐☆☆☆ |
| processbuilder | ❌ 不需要 | 高 | ⭐⭐⭐⭐☆ |
| apache commons exec | ✅ 需要 | 非常高 | ⭐⭐⭐⭐⭐ |
| processhandle (java 9+) | ❌ 不需要 | 特定用途 | ⭐⭐⭐☆☆ |
你可以根据项目需求选择合适的方式。如果需要健壮的流程控制和异常处理,推荐使用 apache commons exec。
到此这篇关于java执行.bat文件的四种高效方法的文章就介绍到这了,更多相关java执行.bat文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论