java调用命令行工具

更新时间 🔔🕙 2024年1月29日

有时需要在java中调用命令行,执行命令行指令。
例如:在java中获取git的信息

第一种:ProcessBuilder方式

这里需要注意,command是一个数组,数组的第一个元素,必须是存在的可执行文件。

java.lang.ProcessBuilder#ProcessBuilder(java.util.List command)
java.lang.ProcessBuilder#ProcessBuilder(java.lang.String… command)
java.lang.ProcessBuilder#command(java.util.List command)
java.lang.ProcessBuilder#command(java.lang.String… command)
java.lang.ProcessBuilder#command()

例如:processBuilder.command(new String[]{"/bin/bash","-c", "git rev-parse HEAD"})processBuilder.command(new String[]{"git", "rev-parse HEAD"})是可以的。
但是processBuilder.command(new String[]{"git rev-parse HEAD"})是不可以的,会提示找不到文件no such file。这是因为数组的第一个元素,java中会去判断该可执行文件是否存在。

StringBuilder sbu = new StringBuilder();
try {
    // 使用ProcessBuilder执行命令
    ProcessBuilder processBuilder = new ProcessBuilder();
    processBuilder.directory(workDirectory);// 设置工作目录
    processBuilder.command(command);
    // 读取命令执行结果
    Process process = processBuilder.start();
    try (
            InputStream is = process.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
            BufferedReader reader = new BufferedReader(isr);
            ) {
        String line;
        while ((line = reader.readLine()) != null) {
            sbu.append(line).append(System.lineSeparator());
        }
        // 等待命令执行完成
        int exitCode = process.waitFor();
        //System.out.println("Exit Code: " + exitCode);
    } catch (Exception e) {
        e.printStackTrace();
    }
} catch (IOException e) {
    e.printStackTrace();
}

第二种 Runtime#exec执行

java.lang.Runtime#exec(java.lang.String command)
java.lang.Runtime#exec(java.lang.String command, java.lang.String[] envp)
java.lang.Runtime#exec(java.lang.String command, java.lang.String[] envp, java.io.File workFolder)
java.lang.Runtime#exec(java.lang.String[] command)
java.lang.Runtime#exec(java.lang.String[] command, java.lang.String[] envp)
java.lang.Runtime#exec(java.lang.String[] command, java.lang.String[] envp, java.io.File workFolder)
转载请备注引用地址:编程记忆 » java调用命令行工具