Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Java by (7k points)

I found several code snippets for running cmd commands through a Java class, but I was not able to understand them.

This is code for opening the cmd:

public void excCommand(String new_dir){

    Runtime rt = Runtime.getRuntime();

    try {

        rt.exec(new String[]{"cmd.exe","/c","start"});

    } catch (IOException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

}

Can anyone help me to understand how to cd a directory such as:
 

cd C:\Program Files\Flowella

then run other commands on that directory?

I found several code snippets for running cmd commands through a Java class, but I was not able to understand them.

This is code for opening the cmd:

public void excCommand(String new_dir){

    Runtime rt = Runtime.getRuntime();

    try {

        rt.exec(new String[]{"cmd.exe","/c","start"});

    } catch (IOException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

}

Can anyone help me to understand how to cd a directory such as:
cd C:\Program Files\Flowella

then run other commands on that directory?

1 Answer

0 votes
by (13.1k points)

You can run a process from a different directory to the working directory of your Java program is to change the directory and then run the process in the same command line by using cmd.exe to run a command line such as cd some_directory && some_program.

The following example changes to a different director and runs dir from there.

import java.io.*;

public class CmdTest {

    public static void main(String[] args) throws Exception {

        ProcessBuilder builder = new ProcessBuilder(

            "cmd.exe", "/c", "cd \"C:\\Program Files\\Microsoft SQL Server\" && dir");

        builder.redirectErrorStream(true);

        Process p = builder.start();

        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line;

        while (true) {

            line = r.readLine();

            if (line == null) { break; }

            System.out.println(line);

        }

    }

}

Here I am using a ProcessBuilder to run the command. Amongst other things, this allows me to redirect the process’s standard error into its standard output, by calling redirectErrorStream(true). Doing so gives me only one stream to read from.

This gives me the following output on my machine

C:\Users\Jake\StackOverflow>java CmdTest

 Volume in drive C is Windows7

 Volume Serial Number is D8F0-C934

 Directory of C:\Program Files\Microsoft SQL Server

03/03/2021  11:03    <DIR>          .

03/03/2021  11:03    <DIR>          ..

03/03/2021  20:37    <DIR>          100

03/03/2021  20:35    <DIR>          80

03/03/2021  20:35    <DIR>          90

03/03/2021  20:39    <DIR>          MSSQL10_50.SQLEXPRESS

               0 File(s)              0 bytes

               6 Dir(s)  209,496,424,448 bytes free

Want to learn Java? Check out the Java certification from Intellipaat.

Related questions

Browse Categories

...