Chapter 18 - Exercise 22

(5) Modify so that, instead of printing the standard output stream, it returns the results of executing the program as a List of Strings. Demonstrate the use of this new version of the utility.

package com.ciaoshen.thinkinjava.chapter18;
import java.util.*;

public class Exercise22 {
    public static List<String> command(String command) {
        boolean err = false;
        List<String> list=new ArrayList<String>();
        try {
            Process process = new ProcessBuilder(command.split(" ")).start();
            BufferedReader results = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String s;
            while((s = results.readLine())!= null){
            BufferedReader errors = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            // Report errors and return nonzero value
            // to calling process if there are problems:
            while((s = errors.readLine())!= null) {
                err = true;
        } catch(Exception e) {
            // Compensate for Windows 2000, which throws an
            // exception for the default command line:
            if(!command.startsWith("CMD /C")){
                command("CMD /C " + command);
                throw new RuntimeException(e);
            throw new OSExecuteException("Errors executing " + command);
        return list;

    public static void main(String[] args){
        List<String> reverse=Exercise22.command("javap com.ciaoshen.thinkinjava.chapter18.OSExecute");

Need Java Developers? Hire Me »

I know Java. Talk is cheap, watch my code.

I live in CANADA now.