在Java中,可以通过调用系统命令的方式来执行shell/bat命令,可以用以下代码实现:
// 写法一:Runtime.getRuntime().exec()
Process process = Runtime.getRuntime().exec("command");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
其中,command为待执行的命令,可以是单个命令,也可以是多个命令的组合。需要注意的是,如果待执行的命令是一个组合命令(例如多个shell/bat命令组合成的一个命令),则需要将这个命令放在一个脚本文件中,然后在Java代码中通过运行该脚本文件来执行多个命令。
示例一:执行shell命令并输出结果
假设我们有如下一个shell脚本test.sh,其中包含了两个命令:
echo "Hello World"
ls -l
我们可以在Java中通过以下代码来执行该脚本并输出结果:
Process process = Runtime.getRuntime().exec("sh test.sh");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
执行结果如下:
Hello World
total 8
-rw-r--r-- 1 user staff 54 Jun 2 14:06 test.sh
示例二:执行bat命令并获取返回值
假设我们有如下一个bat脚本test.bat,其中包含了两个命令:
echo Hello World
dir
我们可以在Java中通过以下代码来执行该脚本并获取返回值:
// 写法二:ProcessBuilder.start()
ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "test.bat");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
int exitCode = process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("Exit code: " + exitCode);
执行结果如下:
Hello World
Volume in drive C has no label.
Volume Serial Number is B8E2-DE04
Directory of C:\Users\user\Desktop
02/06/2021 03:16 PM <DIR> .
02/06/2021 03:16 PM <DIR> ..
02/06/2021 11:43 AM 1,423 sample.txt
02/06/2021 03:17 PM 25 test.bat
2 File(s) 1,448 bytes
2 Dir(s) 875,158,423,040 bytes free
Exit code: 0
注意:在使用Runtime.getRuntime().exec()执行多个命令组合时,需要将多个命令用分号(Windows)或者双竖线(Linux)隔开。例如:
Process process = Runtime.getRuntime().exec("command1; command2");
// 或者
Process process = Runtime.getRuntime().exec("command1 || command2");
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中如何执行多条shell/bat命令 - Python技术站