Complete Guide to Getting Output from Command Line Programs Using Runtime.getRuntime().exec() in Java

Nov 21, 2025 · Programming · 8 views · 7.8

Keywords: Java | Runtime.exec | Process Execution | Output Capture | ProcessBuilder

Abstract: This article provides an in-depth exploration of executing command line programs in Java using Runtime.getRuntime().exec() and capturing their output. It details methods for reading both standard output and error streams, offers complete code examples and best practices, including modern alternatives using ProcessBuilder. The discussion also covers common pitfalls and debugging techniques to help developers properly handle external process execution and output capture.

Introduction

In Java development, there is often a need to execute external command line programs and capture their execution results. The Runtime.getRuntime().exec() method provides this capability, but using it correctly to capture output requires a deep understanding of process execution mechanisms and stream handling.

Basic Execution Method

Java executes external commands through the exec method of the Runtime class, which returns a Process object representing the executing subprocess:

Runtime rt = Runtime.getRuntime();
String[] commands = {"system.exe", "-get", "t"};
Process proc = rt.exec(commands);

Output Stream Reading

The Process object provides getInputStream() and getErrorStream() methods for obtaining standard output and error output respectively:

BufferedReader stdInput = new BufferedReader(
    new InputStreamReader(proc.getInputStream()));

BufferedReader stdError = new BufferedReader(
    new InputStreamReader(proc.getErrorStream()));

Complete Output Capture

To ensure all output is captured, both standard output and error output streams must be read:

// Read standard output
System.out.println("Standard output of the command:");
String s = null;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

// Read error output
System.out.println("Standard error of the command (if any):");
while ((s = stdError.readLine()) != null) {
    System.out.println(s);
}

Process Waiting and Exit Codes

Use the waitFor() method to wait for process completion and obtain the exit code:

int exitVal = proc.waitFor();
System.out.println("Process exit value: " + exitVal);

Modern Alternative

ProcessBuilder offers more flexible and powerful process creation capabilities:

ProcessBuilder pb = new ProcessBuilder("system.exe", "-get", "t");
Process proc = pb.start();
// Subsequent processing is the same as with Runtime.exec()

Common Issues and Solutions

When output cannot be obtained, possible causes include:

Best Practices

1. Always read both standard output and error output streams

2. Use try-with-resources to ensure proper resource release

3. Implement appropriate timeout mechanisms

4. Consider using ProcessBuilder for better control

Conclusion

Proper use of Runtime.getRuntime().exec() requires comprehensive consideration of process execution, stream reading, and error handling. Through the methods introduced in this article, developers can reliably execute external commands in Java applications and capture their output.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.