Java Runtime.getRuntime(): getting output from executing a command line program

前端 未结 12 1383
清歌不尽
清歌不尽 2020-11-22 00:18

I\'m using the runtime to run command prompt commands from my Java program. However, I\'m not aware of how I can get the output the command returns.

Here is my code:

12条回答
  •  失恋的感觉
    2020-11-22 01:01

    Adapted from the previous answer:

    public static String execCmdSync(String cmd, CmdExecResult callback) throws java.io.IOException, InterruptedException {
        RLog.i(TAG, "Running command:", cmd);
    
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(cmd);
    
        //String[] commands = {"system.exe", "-get t"};
    
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
    
        StringBuffer stdOut = new StringBuffer();
        StringBuffer errOut = new StringBuffer();
    
        // Read the output from the command:
        System.out.println("Here is the standard output of the command:\n");
        String s = null;
        while ((s = stdInput.readLine()) != null) {
            System.out.println(s);
            stdOut.append(s);
        }
    
        // Read any errors from the attempted command:
        System.out.println("Here is the standard error of the command (if any):\n");
        while ((s = stdError.readLine()) != null) {
            System.out.println(s);
            errOut.append(s);
        }
    
        if (callback == null) {
            return stdInput.toString();
        }
    
        int exitVal = proc.waitFor();
        callback.onComplete(exitVal == 0, exitVal, errOut.toString(), stdOut.toString(), cmd);
    
        return stdInput.toString();
    }
    
    public interface CmdExecResult{
        void onComplete(boolean success, int exitVal, String error, String output, String originalCmd);
    }
    

提交回复
热议问题