概述:可以使用Runtime
类和Process
类。
使用Runtime.getRuntime().exec()
方法执行Windows命令。这个方法接受一个字符串参数,表示要执行的命令。例如,要执行ipconfig
命令,可以这样写:
String command = "ipconfig";
Process process = Runtime.getRuntime().exec(command);
获取进程的输入流和错误流。通过
Process.getInputStream()
和Process.getErrorStream()
方法可以分别获取进程的输入流和错误流。这两个流可以用来读取命令执行的结果和错误信息。读取进程的输出。可以使用
BufferedReader
类来读取进程的输出。例如:
BufferedReader inputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = inputReader.readLine()) != null) {
System.out.println(line);
}
- 读取进程的错误输出。与读取进程的输出类似,可以使用
BufferedReader
类来读取进程的错误输出。例如:
BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line;
while ((line = errorReader.readLine()) != null) {
System.err.println(line);
}
- 等待进程完成。使用
Process.waitFor()
方法等待进程完成。例如:
int exitCode = process.waitFor();
System.out.println("Exit code: " + exitCode);
这就是一个简单的Java控制Windows进程的概述。需要注意的是,这种方法只适用于Windows操作系统,因为执行的命令是Windows特有的。在其他操作系统上,需要使用相应的命令。
服务管理器项目地址:
nanshaws/processManager: 用javafx搞了一个简单的服务管理器,可用来开启和关闭mysql等类型的服务。当前只可运行在Windows上 (github.com)
package org.example.processmanager.utils;
import java.io.IOException;
/**
* @author cyl
*/
public class ProcessManager {
public static void start(String name) {
// 命令行指令,启动 name 服务
String startCommand = "sc start "+name;
try {
// 启动 name 服务
Process startProcess = new ProcessBuilder("cmd", "/c", startCommand).start();
startProcess.waitFor();
System.out.println(name+"服务已启动");
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
public static void stop(String name){
// 命令行指令,关闭 name 服务
String stopCommand = "sc stop "+name;
// 关闭 name 服务
Process stopProcess = null;
try {
stopProcess = new ProcessBuilder("cmd", "/c", stopCommand).start();
stopProcess.waitFor();
System.out.println(name+"服务已关闭");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}