[Apache Commons组件学习]exec

王高超
2023-12-01

我们在实际学习和开发中,总避免不了,希望能够直接通过Java运行一些系统相关的脚本之类的,所以,虽然可以借助

Runtime.getRuntime().exec调用外部程序,Runtime.getRuntime().exec是java原生态的命令,而Apache commons-exec封装一些常用的方法用来执行外部命令。例如我们想得到当前windows目录下的文件信息,在cmd命令行下的命令是dir。具体以代码示例展示2个方法实现

1.原生Java方式实现

String pl_cmd = "cmd.exe /c dir";
        Process p_pl = Runtime.getRuntime().exec(pl_cmd);
        BufferedReader br_pl = new BufferedReader(new InputStreamReader(
                p_pl.getInputStream()));
        String stdout = br_pl.readLine();
        while (stdout != null) {
            System.out.println(stdout);
            stdout = br_pl.readLine();
        }

2.使用Apache common-exec

ByteArrayOutputStream stdout = new ByteArrayOutputStream();
        PumpStreamHandler psh = new PumpStreamHandler(stdout);
        CommandLine cl = CommandLine.parse("cmd.exe /c dir");
        DefaultExecutor exec = new DefaultExecutor();
        exec.setStreamHandler(psh);
        exec.execute(cl);
        System.out.println(stdout.toString());

注意点,导CommandLine包别倒错了.第二种方式需要导入的包名是:

import org.apache.commons.exec.CommandLine;

另外就是推荐使用 Command.parse();方法来创建命令行,不然的话可能会出现 create process error = 2;

 类似资料: