zoukankan      html  css  js  c++  java
  • Java示例:如何执行进程并读取输出

    下面是一个例子,演示如何执行一个进程(类似于在命令行下键入命令),读取进程执行的输出,并根据进程的返回值判断是否执行成功。一般来说,进程返回 0 表示执行成功,其他值表示失败。

    import java.io.*;

    /**
     * 示例:执行进程并返回结果
     */
    public class ProcessExecutor {

        public static final int SUCCESS = 0;            // 表示程序执行成功

        public static final String COMMAND = "java.exe -version";    // 要执行的语句

        public static final String SUCCESS_MESSAGE = "程序执行成功!";

        public static final String ERROR_MESSAGE = "程序执行出错:";

        public static void main(String[] args) throws Exception {

            // 执行程序
            Process process = Runtime.getRuntime().exec(COMMAND);

            // 打印程序输出
            readProcessOutput(process);

            // 等待程序执行结束并输出状态
            int exitCode = process.waitFor();

            if (exitCode == SUCCESS) {
                System.out.println(SUCCESS_MESSAGE);
            } else {
                System.err.println(ERROR_MESSAGE + exitCode);
            }
        }

        /**
         * 打印进程输出
         *
         * @param process 进程
         */
        private static void readProcessOutput(final Process process) {
            // 将进程的正常输出在 System.out 中打印,进程的错误输出在 System.err 中打印
            read(process.getInputStream(), System.out);
            read(process.getErrorStream(), System.err);
        }

        // 读取输入流
        private static void read(InputStream inputStream, PrintStream out) {
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

                String line;
                while ((line = reader.readLine()) != null) {
                    out.println(line);
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {

                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
     
  • 相关阅读:
    24.最优布线问题(kruskal算法)
    24.最优布线问题(kruskal算法)
    Algs4-1.4.11为StaticSETofInts添加一个实列方法howMany()
    Algs4-1.4.9预测程序运行时间
    Algs4-1.4.10二分查找找出元素所在的最小索引
    Algs4-1.4.7统计算术运算与比较次数
    Algs4-1.4.8计算输入文件中相等的整数对的数量
    Algs4-1.4.6给出以下代码段的运行时间的增长数量级
    Algs4- 1.4.4参照表1.4.4为TwoSum建立一和类似的表格
    Algs4-1.4.2修改ThreeSum防止两个int值相加可能溢出
  • 原文地址:https://www.cnblogs.com/langtianya/p/7500619.html
Copyright © 2011-2022 走看看