49

In Java, I want to be able to execute a Windows command.

The command in question is netsh. This will enable me to set/reset my IP address.

Note that I do not want to execute a batch file.

Instead of using a batch file, I want to execute such commands directly. Is this possible?


Here is my implemented Solution for Future Reference:

public class JavaRunCommand {
    private static final String CMD = 
        "netsh int ip set address name = \"Local Area Connection\" source = static addr = 192.168.222.3 mask = 255.255.255.0";
    public static void main(String args[]) {

        try {
            // Run "netsh" Windows command
            Process process = Runtime.getRuntime().exec(CMD);

            // Get input streams
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

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

            // Read command errors
            System.out.println("Standard error: ");
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }
}
6
  • 1
    This has been answered so many times. Just look at stackoverflow suggestions to find some of them Commented Aug 18, 2011 at 18:29
  • @SJuan76, My apologies. Could you perhaps link me to some of those questions? Commented Aug 18, 2011 at 18:30
  • 1
    @mre Just look in the sidebar. Commented Aug 18, 2011 at 18:36
  • 1
    @Matt Ball, facepalm...Thank you. Commented Aug 18, 2011 at 18:39
  • 3
    sigh stackoverflow.com/questions/tagged/processbuilder Commented Aug 18, 2011 at 18:45

5 Answers 5

43
Runtime.getRuntime().exec("netsh");

See Runtime Javadoc.

EDIT: A later answer by leet suggests that this process is now deprecated. However, as per the comment by DJViking, this appears not to be the case: Java 8 documentation. The method is not deprecated.

Sign up to request clarification or add additional context in comments.

1 Comment

In my environment, I had to prepend the command with "cmd /c" i.e. Runtime.getRuntime().exec("cmd /c netsh");
32

Use ProcessBuilder

ProcessBuilder pb=new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process process=pb.start();
BufferedReader inStreamReader = new BufferedReader(
    new InputStreamReader(process.getInputStream())); 

while(inStreamReader.readLine() != null){
    //do something with commandline output.
}

3 Comments

What is the basis for that conclusion? Looking into the javadoc, it is not declared as deprecated. docs.oracle.com/javase/8/docs/api/java/lang/…
Updating this: Since this question is used as a reference when flagging duplicates (i.e, we point the duplicates to this page), it would be nice to clarify this answer, that has more upvotes that the accepted answer. Is there a source for this information? If no, maybe it should be removed as a wring answer?
Runtime.getRuntime().exec() isn't deprecated.
6

You can run the command with Runtime.getRuntime().exec("<command>") (eg. Runtime.getRuntime().exec("tree")). But, this will only run executables found in path, not commands like echo, del, ... But only stuff like tree.com, netstat.com, ... To run regular commands, you will have to put cmd /c before the command (eg Runtime.getRuntime().exec("cmd /c echo echo"))

Comments

3
public static void main(String[] args) {
    String command="netstat";
    try {
        Process process = Runtime.getRuntime().exec(command);
        System.out.println("the output stream is "+process.getOutputStream());
        BufferedReader reader=new BufferedReader( new InputStreamReader(process.getInputStream()));
        String s; 
        while ((s = reader.readLine()) != null){
            System.out.println("The inout stream is " + s);
        }                   
    } catch (IOException e) {
        e.printStackTrace();
    }
}

This works.

1 Comment

This reads every other line of the output. Should be: String s; while ((s = reader.readLine() != null) { System.out.println(s); }
1

Runtime#exec().

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.