Programming Tutorials

Executing other system commands and programs from a Java Program

By: Emiley J in Java Tutorials on 2007-09-02  

In safe environments, you can use Java to execute other heavyweight processes (that is, programs) on your multitasking operating system. Several forms of the exec() method allow you to name the program you want to run as well as its input parameters. The exec() method returns a Process object, which can then be used to control how your Java program interacts with this new running process. Because Java can run on a variety of platforms and under a variety of operating systems, exec() is inherently environment-dependent.
The following example uses exec() to launch notepad, Windows' simple text editor. Obviously, this example must be run under the Windows operating system.

// Demonstrate exec().
class ExecDemo {
    public static void main(String args[]) {
        Runtime r = Runtime.getRuntime();
        Process p = null;
        try {
            p = r.exec("notepad");
        } catch (Exception e) {
            System.out.println("Error executing notepad.");
        }
    }
}

There are several alternate forms of exec(), but the one shown in the example is the most common. The Process object returned by exec() can be manipulated by Process' methods after the new program starts running. You can kill the subprocess with the destroy() method. The waitFor() method causes your program to wait until the subprocess finishes. The exitValue() method returns the value returned by the subprocess when it is finished. This is typically 0 if no problems occur. Here is the preceding exec() example modified to wait for the running process to exit:

// Wait until notepad is terminated.
class ExecDemoFini {
    public static void main(String args[]) {
        Runtime r = Runtime.getRuntime();
        Process p = null;
        try {
            p = r.exec("notepad");
            p.waitFor();
        } catch (Exception e) {
            System.out.println("Error executing notepad.");
        }
        System.out.println("Notepad returned " + p.exitValue());
    }
}

While a subprocess is running, you can write to and read from its standard input and output. The getOutputStream() and getInputStream() methods return the handles to standard in and out of the subprocess.






Add Comment

* Required information
1000

Comments

No comments yet. Be the first!

Most Viewed Articles (in Java )

Latest Articles (in Java)