Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java 执行linux命令行


在 Java 中执行 Linux 命令行有多种方式,以下是一些常见的实现方式,包括步骤流程、依赖坐标和示例代码:

使用 Runtime.exec()

这是一种基本的方式,可以在 Java 中执行系统命令。然而,它有一些限制和安全风险,因此在使用时需要小心。

步骤流程:

  1. 使用 Runtime.getRuntime().exec(command) 调用命令。
  2. 可以使用 Process 对象获取命令的输出流、错误流以及等待命令执行完成。

示例代码:

public class RuntimeExecExample {
    public static void main(String[] args) {
        try {
            String command = "ls -l"; // 你要执行的Linux命令
            Process process = Runtime.getRuntime().exec(command);

            // 获取命令输出流
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待命令执行完成
            int exitCode = process.waitFor();
            System.out.println("Command exited with code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

使用 ProcessBuilder

ProcessBuilder 提供了更灵活的方式来执行命令,并且可以设置工作目录、环境变量等。

步骤流程:

  1. 创建 ProcessBuilder 对象并指定命令及参数。
  2. 可选地设置工作目录、环境变量等。
  3. 调用 start() 方法启动进程。
  4. 可以使用返回的 Process 对象来获取输出流、错误流以及等待命令执行完成。

示例代码:

public class ProcessBuilderExample {
    public static void main(String[] args) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");
            Process process = processBuilder.start();

            // 获取命令输出流
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待命令执行完成
            int exitCode = process.waitFor();
            System.out.println("Command exited with code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

对于以上两种方式,不需要额外的依赖库。

使用 Apache Commons Exec 库

这是一个开源的库,用于更安全地执行外部命令。

Maven 依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-exec</artifactId>
    <version>1.3</version>
</dependency>

Gradle 依赖:

implementation 'org.apache.commons:commons-exec:1.3'

示例代码:

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
import org.apache.commons.exec.ExecuteResultHandler;
import org.apache.commons.exec.ExecuteWatchdog;
import org.apache.commons.exec.PumpStreamHandler;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class CommonsExecExample {
    public static void main(String[] args) {
        try {
            String command = "ls -l";
            CommandLine cmdLine = CommandLine.parse(command);

            DefaultExecutor executor = new DefaultExecutor();

            // 设置超时时间
            ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); // 60秒超时
            executor.setWatchdog(watchdog);

            // 设置命令输出处理
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
            executor.setStreamHandler(streamHandler);

            // 执行命令
            int exitCode = executor.execute(cmdLine);
            System.out.println("Command exited with code: " + exitCode);

            // 打印命令输出
            String output = outputStream.toString(StandardCharsets.UTF_8);
            System.out.println("Command output:\n" + output);
        } catch (ExecuteException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上是几种在 Java 中执行 Linux 命令的方式,每种方式都有其优缺点,请根据项目需求选择适合的方法。

linux 系统中,如果想在单行命令行一次性执行多个命令,可以通过如下几种方式。 ...
我们知道 jdk 的 bin 目录之中有很多命令行工具,这些命令主要包括用于监视虚拟机和故障处理的工具。Sun JDK 监控和故障处理工具主 ...
Linux 的命令可以分为文件管理、文档编辑、文件传输、磁盘管理、磁盘维护、网络通讯、网络管理、系统管理、系统设置、备份压缩和设备管理。以下 ...
以下是一些常见的实现方式,以及它们的步骤流程、示例代码以及相关的Maven和Gradle依赖坐标。使用`thenApply()`、`then ...
在Java中执行JavaScript代码有几种方式,我将为你介绍其中的三种常见方式:使用Java的内置脚本引擎、使用第三方库GraalVMP ...