[Java SE] Java执行命令行
1 序言
- 执行命令行,是实现自动化程序、跨环境调用的重要途径
2 源码示例
command = jps -l
package test.java;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* @author johnny-zen
* @version v1.0
* @create-time 2023/8/25 11:38
* @description ...
* @refrence-doc
* [1] 如何在 Java 中运行命令行 - 火焰兔 - https://www.zadmei.com/rhzjzyxm.html
* @gpt-promt
*/
public class ExecuteCommandTest {
@Test
public void processTest(){
String command = "jps -l";// jps -l / java -verbose
try {
// 创建一个 Runtime 实例
Runtime runtime = Runtime.getRuntime();
// 执行命令行命令
Process process = runtime.exec(command);
// 获取命令行输出结果
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 等待命令行执行完毕
int exitCode = process.waitFor();
System.out.println("finished to execute the command, and the exit code : " + exitCode);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- output
processTest()
9984 org/netbeans/Main
22180 org.jetbrains.jps.cmdline.Launcher
22244 com.intellij.rt.junit.JUnitStarter
31268 sun.tools.jps.Jps
18424 D:\Program\DBeaver-23-0-4\dbeaver\plugins\org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
27368 org.jetbrains.jps.cmdline.Launcher
11788 cn.xxx.bd.datasource.biz.DataSourceApplication
6604 org.jetbrains.idea.maven.server.RemoteMavenServer36
finished to execute the command, and the exit code : 0
command = ping xxx
@Test
public void processBuilderTest(){
try {
// 指定要执行的命令或可执行文件及其参数
List<String> command = Arrays.asList("ping","www.baidu.com");
//List<String> command = Arrays.asList("cmd.exe", "/c", "dir");
// 创建一个 ProcessBuilder 实例
ProcessBuilder processBuilder = new ProcessBuilder(command); //new ProcessBuilder("dir", "-l");
// 设置工作目录(可选)
//String workingDirectory = "C:\\Users\\xxxxxx\\Desktop";
//processBuilder.directory(new File(workingDirectory));
// 启动进程
Process process = processBuilder.start();
// 获取命令行输出结果 (可选)
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));// Windows CMD 默认以 GBK 字符集 编码文本
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 获取命令行输出 | 等待外部进程结束
int exitValue = process.waitFor();
System.out.println("finished to execute the command, and the exit code : " + exitValue);
// 关闭进程
process.destroy();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
processBuilderTest()
D:\Program\Java\jdk1.8.0_261\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Program\IDEA\IDEA_COMMUNITY 2022.2\lib\idea_rt.jar=61044:D:\Program\IDEA\IDEA_COMMUNITY 2022.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\xxxx\AppData\Local\Temp\classpath2097328303.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 test.java.ExecuteCommandTest,processBuilderTest
正在 Ping www.baidu.com [120.232.145.144] 具有 32 字节的数据:
来自 120.232.145.144 的回复: 字节=32 时间=44ms TTL=48
来自 120.232.145.144 的回复: 字节=32 时间=44ms TTL=48
来自 120.232.145.144 的回复: 字节=32 时间=45ms TTL=48
来自 120.232.145.144 的回复: 字节=32 时间=44ms TTL=48
120.232.145.144 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 44ms,最长 = 45ms,平均 = 44ms
<key: USERDOMAIN_ROAMINGPROFILE, value: XXXX>
...
获取环境变量信息
/**
* 获取环境变量信息 (可选)
*/
public static void getEnvVariables(){
// 指定要执行的命令或可执行文件及其参数
List<String> command = Arrays.asList("cls");
//List<String> command = Arrays.asList("cmd.exe", "/c", "dir");
// 创建一个 ProcessBuilder 实例
ProcessBuilder processBuilder = new ProcessBuilder(command); //new ProcessBuilder("dir", "-l");
// 获取环境信息 (可选)
// eg: <key: JAVA_HOME, value: D:\Program\Java\jdk1.8.0_261> ...
Map<String, String> environment = processBuilder.environment();
environment.entrySet().forEach(varEntry -> {
System.out.println(String.format("<key: %s, value: %s>", varEntry.getKey(), varEntry.getValue()));
});
}
out
<key: USERDOMAIN_ROAMINGPROFILE, value: YYUYU>
<key: MAVEN_REPOSITORY_HOME, value: D:\Program_Data\maven_repository>
<key: PROCESSOR_LEVEL, value: 6>
<key: SESSIONNAME, value: Console>
<key: ALLUSERSPROFILE, value: C:\ProgramData>
<key: PROCESSOR_ARCHITECTURE, value: AMD64>
<key: PSModulePath, value: C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules>
<key: SystemDrive, value: C:>
<key: ARTHAS_HOME, value: D:\Program\Arthas\lib\3.5.2\arthas>
<key: MAVEN_HOME, value: D:\Program\maven\apache-maven-3.8.1>
<key: ACTIVEMQ_HOME, value: D:\Program\ActiveMQ\apache-artemis-2.19.1>
<key: USERNAME, value: xxxxxx>
<key: USERDNSDOMAIN, value: XXXX.COM>
<key: ProgramFiles(x86), value: C:\Program Files (x86)>
<key: TYPE, value: LATITUDE>
<key: PATHEXT, value: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC>
<key: DriverData, value: C:\Windows\System32\Drivers\DriverData>
<key: OneDriveConsumer, value: C:\Users\xxxxxx\OneDrive>
<key: INFLUXDB_HOME, value: D:\Program\influxdb\influxdb-1.8.4-1>
<key: PyCharm Community Edition, value: D:\Program\PyCharm\PyCharm2023.2.1\bin;>
<key: ProgramData, value: C:\ProgramData>
<key: ProgramW6432, value: C:\Program Files>
<key: GNU_HOME, value: D:\Program\GNUWin\GnuWin32>
<key: HOMEPATH, value: \Users\xxxxxx>
<key: PROCESSOR_IDENTIFIER, value: Intel64 Family 6 Model 140 Stepping 1, GenuineIntel>
<key: M2_HOME, value: D:\Program\maven\apache-maven-3.8.1\bin>
<key: ProgramFiles, value: C:\Program Files>
<key: PUBLIC, value: C:\Users\Public>
<key: windir, value: C:\Windows>
<key: =::, value: ::\>
<key: ZES_ENABLE_SYSMAN, value: 1>
<key: LOCALAPPDATA, value: C:\Users\xxxxxx\AppData\Local>
<key: IntelliJ IDEA, value: D:\Program\IDEA\IDEA 2021.3.1\IntelliJ IDEA 2021.3.1\bin;>
<key: NEO4J_HOME, value: D:\Program\Neo4j\neo4j-community-3.5.35>
<key: USERDOMAIN, value: XXXX>
<key: LOGONSERVER, value: \\CD-S-DC01>
<key: JAVA_HOME, value: D:\Program\Java\jdk1.8.0_261>
<key: =*:, value: *:\>
<key: GRADLE_HOME, value: D:\Program\gradle\gradle-6.8>
<key: NACOS_HOME, value: D:\Program\nacos\nacos-server-2.0.3\nacos>
<key: OneDrive, value: C:\Users\xxxxxx\OneDrive>
<key: APPDATA, value: C:\Users\xxxxxx\AppData\Roaming>
<key: GRADLE_USER_HOME, value: D:\Program_Data\maven_repository\>
<key: CHASSIS, value: Notebook>
<key: CommonProgramFiles, value: C:\Program Files\Common Files>
<key: Path, value: C:\Program Files\YunShu\utils;c:\Users\xxxxxx\AppData\Local\Programs\Cursor\resources\app\bin; ....>
<key: SERIAL, value: GNDJKG3>
<key: OS, value: Windows_NT>
<key: COMPUTERNAME, value: YYYYYY>
<key: CATALINA_HOME, value: D:\Program\Apache-Tomcat\apache-tomcat-8.5.84>
<key: MODEL, value: _3420>
<key: PROCESSOR_REVISION, value: 8c01>
<key: CLASSPATH, value: .;D:\Program\Java\jdk1.8.0_261\lib\dt.jar;D:\Program\Java\jdk1.8.0_261\lib\tools.jar;>
<key: CommonProgramW6432, value: C:\Program Files\Common Files>
<key: ComSpec, value: C:\Windows\system32\cmd.exe>
<key: SystemRoot, value: C:\Windows>
<key: TEMP, value: C:\Users\xxxxxx\AppData\Local\Temp>
<key: HOMEDRIVE, value: C:>
<key: USERPROFILE, value: C:\Users\xxxxxx>
<key: TMP, value: C:\Users\xxxxxx\AppData\Local\Temp>
<key: CommonProgramFiles(x86), value: C:\Program Files (x86)\Common Files>
<key: NUMBER_OF_PROCESSORS, value: 8>
<key: IDEA_INITIAL_DIRECTORY, value: D:\Program\IDEA\IDEA_COMMUNITY_2023.2\bin>
3 参考文献
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号