📜  如何从Java程序执行本机 Shell 命令?(1)

📅  最后修改于: 2023-12-03 15:37:55.357000             🧑  作者: Mango

如何从Java程序执行本机 Shell 命令?

在Java程序中,有时候我们需要执行一些本机的 Shell 命令,比如打开某个应用程序,关闭服务等等。本文将介绍如何从Java程序中执行本机的 Shell 命令。

使用 Runtime 类执行 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 类执行 Shell 命令

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 命令时,需要对命令本身的合法性进行检查,以避免潜在的安全漏洞。