How to execute a command prompt command & view output in Java

The basic part is very easy. To do this, we will use the Runtime’s exec method. The code would be like:
Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("ping localhost");
Code language: Java (java)
The command (I’ve used “ping localhost” ) can be anything that your command prompt recognizes. It will vary on UNIX and Windows environment. Now comes the bit where you would want to see the output of the execution. This I handled by created my wrapper to read the output stream. I then latch the stream to the process and bingo! Here’s the wrapper, its getter and the actual code to get the output:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class RuntimeExec { public StreamWrapper getStreamWrapper(InputStream is, String type){ return new StreamWrapper(is, type); } private class StreamWrapper extends Thread { InputStream is = null; String type = null; String message = null; public String getMessage() { return message; } StreamWrapper(InputStream is, String type) { this.is = is; this.type = type; } public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuffer buffer = new StringBuffer(); String line = null; while ( (line = br.readLine()) != null) { buffer.append(line);//.append("\n"); } message = buffer.toString(); } catch (IOException ioe) { ioe.printStackTrace(); } } } // this is where the action is public static void main(String[] args) { Runtime rt = Runtime.getRuntime(); RuntimeExec rte = new RuntimeExec(); StreamWrapper error, output; try { Process proc = rt.exec("ping localhost"); error = rte.getStreamWrapper(proc.getErrorStream(), "ERROR"); output = rte.getStreamWrapper(proc.getInputStream(), "OUTPUT"); int exitVal = 0; error.start(); output.start(); error.join(3000); output.join(3000); exitVal = proc.waitFor(); System.out.println("Output: "+output.message+"\nError: "+error.message); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
Code language: Java (java)

View Comments

  • What i liked is the fact that i can convert it to print the output as the native command is being executed, by adding a output statement to the while loop in the StreamWrapper

  • However, if you try some other commands, like "date" or "dir" you will get a file not found IOException. some commands work and other don't...

  • Hi Abhinav,

    Your solution was amazing. I was trying to run a python script using a runtime environment within a Servlet. It was getting timed out at proc.waitFor()
    Process proc = rt.exec("C:/Python27/python ./dev/src/__init__.py");
    I used jython way of doing it but all are working in a standalone application but not through weblogic. Using this solution I could get the output within the console and I am able to use the output now. I was hunting for it from 4 days..

    Thanks a lot...You rock..

  • Hello. This is a very wonderful code. However, i had a problem on showing the applications that do not specify its version. The output is not the same as what you see on the control panel.

  • Why don't you just save the output in a file by just redirecting the the command line and just get data from the file.If your only concern is to view the output of the execution ?

  • thank a million for the code
    i have to run 3 seperate commands on my terminal to get my output... should i create 3 different process for this in one pgm?
    else how should i modify ur code to accomadate my requirement.
    thank u!!!!!!!!!

Recent Posts

  • Java

Java URL Encoder/Decoder Example

Java URL Encoder/Decoder Example - In this tutorial we will see how to URL encode/decode…

4 years ago
  • General

How to Show Multiple Examples in OpenAPI Spec

Show Multiple Examples in OpenAPI - OpenAPI (aka Swagger) Specifications has become a defecto standard…

4 years ago
  • General

How to Run Local WordPress using Docker

Local WordPress using Docker - Running a local WordPress development environment is crucial for testing…

4 years ago
  • Java

Create and Validate JWT Token in Java using JJWT

1. JWT Token Overview JSON Web Token (JWT) is an open standard defines a compact…

4 years ago
  • Spring Boot

Spring Boot GraphQL Subscription Realtime API

GraphQL Subscription provides a great way of building real-time API. In this tutorial we will…

4 years ago
  • Spring Boot

Spring Boot DynamoDB Integration Test using Testcontainers

1. Overview Spring Boot Webflux DynamoDB Integration tests - In this tutorial we will see…

5 years ago