Java 执行系统命令工具类

Posted jonban

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 执行系统命令工具类相关的知识,希望对你有一定的参考价值。

 

依赖jar

        <!-- 可以在JVM中可靠地执行外部进程的库。 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-exec</artifactId>
            <version>1.3</version>
        </dependency>

 

 

CommandUtils.java

package utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

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

/**
 * 执行系统命令工具类
 * 
 * @author Logen
 *
 */
public class CommandUtils {

    private static final String DEFAULT_CHARSET = "GBK";

    /**
     * 执行指定命令
     * 
     * @param command 命令
     * @return 命令执行完成返回结果
     * @throws IOException 失败时抛出异常,由调用者捕获处理
     */
    public static String exeCommand(String command) throws IOException {
        try (
                ByteArrayOutputStream out = new ByteArrayOutputStream();
        ) {
            int exitCode = exeCommand(command, out);
            if (exitCode == 0) {
                System.out.println("命令运行成功!");
            } else {
                System.out.println("命令运行失败!");
            }
            return out.toString(DEFAULT_CHARSET);
        }
    }

    /**
     * 执行指定命令,输出结果到指定输出流中
     * 
     * @param command 命令
     * @param out 执行结果输出流
     * @return 执行结果状态码:执行成功返回0
     * @throws ExecuteException 失败时抛出异常,由调用者捕获处理
     * @throws IOException 失败时抛出异常,由调用者捕获处理
     */
    public static int exeCommand(String command, OutputStream out) throws ExecuteException, IOException {
        CommandLine commandLine = CommandLine.parse(command);
        PumpStreamHandler pumpStreamHandler = null;
        if (null == out) {
            pumpStreamHandler = new PumpStreamHandler();
        } else {
            pumpStreamHandler = new PumpStreamHandler(out);
        }

        // 设置超时时间为10秒
        ExecuteWatchdog watchdog = new ExecuteWatchdog(10000);

        DefaultExecutor executor = new DefaultExecutor();
        executor.setStreamHandler(pumpStreamHandler);
        executor.setWatchdog(watchdog);

        return executor.execute(commandLine);
    }

    public static void main(String[] args) {
        try {
            String result = exeCommand("ipconfig /all");
            System.out.println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

 

 

.

以上是关于Java 执行系统命令工具类的主要内容,如果未能解决你的问题,请参考以下文章

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

Java多线程与并发库高级应用-工具类介绍

Java多线程与并发库高级应用-工具类介绍

17 java通过Runtime和Process类调用外部命令

如何测量预编译的 java 类的执行时间?

Selenium JavascriptExecutor 详解