📅  最后修改于: 2023-12-03 15:37:55.357000             🧑  作者: Mango
在Java程序中,有时候我们需要执行一些本机的 Shell 命令,比如打开某个应用程序,关闭服务等等。本文将介绍如何从Java程序中执行本机的 Shell 命令。
Java中的Runtime
类提供了一个exec()方法,可以用于在本机上执行 Shell 命令。我们可以使用下面的代码块来实现:
import java.io.*;
public class ExecuteShellCommand {
public static void main(String[] args) {
String command = "ls /home/user/Documents";
try {
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);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的代码块中,我们使用了Runtime
类的exec()
方法来执行ls /home/user/Documents
命令并获取其中的输出结果。其中,exec()
方法返回一个Process
对象,我们可以通过此对象获取命令的输出结果。在这里,我们通过BufferedReader
对象获取命令输出结果,并逐行打印输出。
ProcessBuilder
类是Runtime
类的一个替代品。使用ProcessBuilder
类可以更精细地控制子进程的环境变量,工作目录等等。使用ProcessBuilder
类执行 Shell 命令的代码如下:
import java.io.*;
public class ExecuteShellCommand {
public static void main(String[] args) {
String[] command = {"ls", "/home/user/Documents"};
try {
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Process process = builder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的代码块中,我们使用了ProcessBuilder
类的start()
方法启动子进程。在这里,我们使用了和上面类似的方式获取输出结果。
在本文中,我们分别介绍了使用Runtime
类和ProcessBuilder
类执行本机的 Shell 命令。Runtime
类提供了一个简单的方式来执行 Shell 命令,而ProcessBuilder
类则可以更加精细地控制子进程的环境变量等参数。需要注意的是,在执行 Shell 命令时,需要对命令本身的合法性进行检查,以避免潜在的安全漏洞。