commons-exec

概述

用于执行外部命令和进程的Java库。它提供了一种简单而灵活的方式来启动、监控和终止外部进程,并处理它们的输入和输出。

maven依赖

xml 复制代码
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-exec -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-exec</artifactId>
            <version>1.5.0</version>
        </dependency>

示例

java 复制代码
        String command = "ping localhost";
        ByteArrayOutputStream susStream = new ByteArrayOutputStream();//接收正常结果流
        ByteArrayOutputStream errStream = new ByteArrayOutputStream(); //接收异常结果流
        CommandLine commandLine = CommandLine.parse(command);
        DefaultExecutor exec = new DefaultExecutor();
        PumpStreamHandler streamHandler = new PumpStreamHandler(susStream, errStream);
        exec.setStreamHandler(streamHandler);
        int code = exec.execute(commandLine);
        System.out.println("退出代码: " + code);
        System.out.println(susStream.toString("GBK"));
        System.out.println(errStream.toString("GBK"));

常用API

CommandLine 命令行对象

方法 描述
parse(String line) parse(String line, Map<String, ?> substitutionMap) 静态方法,解析命令行
CommandLine(CommandLine other) CommandLine(File executable) CommandLine(Path executable) CommandLine(String executable) 构造方法
addArgument(String argument) addArgument(String argument, boolean handleQuoting) 添加一个参数
addArguments(String addArguments) addArguments(String addArguments, boolean handleQuoting) addArguments(String[] addArguments) addArguments(String[] addArguments, boolean handleQuoting) 添加多个参数
getArguments() 获取参数
getExecutable() 获取可执行的命令字符串
isFile() 判断是否是可执行文件
getSubstitutionMap() setSubstitutionMap(Map<String, ?> substitutionMap) 设置替换映射,用于替换参数中的变量:${变量}

执行器

  • DefaultExecutor
方法 描述
builder() 静态方法,获取构造器
execute(CommandLine command) execute(CommandLine command, ExecuteResultHandler handler) execute(CommandLine command, Map<String, String> environment) execute(CommandLine command, Map<String, String> environment, ExecuteResultHandler handler) 执行命令行
getProcessDestroyer() setProcessDestroyer(ProcessDestroyer processDestroyer) 获取或设置进程清理操作器
getStreamHandler() setStreamHandler(ExecuteStreamHandler streamHandler) 获取或设置执行结果流处理器
getWatchdog() setWatchdog(ExecuteWatchdog watchdog) 获取或设置执行监控对象
getWorkingDirectory() 获取工作目录
isFailure(int exitValue) 通过执行结果码判断命令行是否执行成功
setExitValue(int value) 设置进程退出值
setExitValues(int[] values) 设置进程退出值
  • DefaultExecutor.Builder
方法 描述
get() 获取DefaultExecutor对象
setExecuteStreamHandler(ExecuteStreamHandler executeStreamHandler) 设置执行结果流处理器
setThreadFactory(ThreadFactory threadFactory) 设置线程工厂
setWorkingDirectory(File workingDirectory) setWorkingDirectory(Path workingDirectory) 设置工作目录
  • DaemonExecutor DefaultExecutor的子类,用于异步执行,方法同DefaultExecutor一致

结果流处理

  • PumpStreamHandler
方法 描述
PumpStreamHandler() PumpStreamHandler(OutputStream allOutputStream) PumpStreamHandler(OutputStream outputStream, OutputStream errorOutputStream) PumpStreamHandler(OutputStream outputStream, OutputStream errorOutputStream, InputStream inputStream) 构造方法
setProcessErrorStream(InputStream is) 进程错误流
setProcessInputStream(OutputStream os) 进程输出流
setProcessOutputStream(InputStream is) 进程输入流
setStopTimeout(Duration timeout) 超时时间
start() 开始
stop() 结束

监控对象

  • Watchdog
方法 描述
builder() 获取构造器
addTimeoutObserver(TimeoutObserver to)
removeTimeoutObserver(TimeoutObserver to)
run()
start()
stop()
  • Watchdog.Builder
方法 描述
get() 获取Watchdog对象
setThreadFactory(ThreadFactory threadFactory) 设置线程工厂
setTimeout(Duration timeout) 设置超时时间
相关推荐
天空属于哈夫克34 分钟前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠1 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌1 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局1 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源1 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it2 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
消失的旧时光-19432 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
NE_STOP3 小时前
Redis--发布订阅命令和Redis事务
java
PAC_3Dame3 小时前
记一次真实的线上OOM
java
SunnyDays10113 小时前
如何在Java中将Word文档转换为图像(JPEG、PNG或SVG)
java