Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run cmd commands through Java

Tags:

java

cmd

cd

I found several code snippets for running cmd commands through a Java class, but I wasn't able to understand it.

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();     } } 

And I found some other links for adding other commands such as cd http://www.coderanch.com/t/109753/Linux-UNIX/exec-command-cd-command-java

How to open the command prompt and insert commands using Java?

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?

like image 897
Reham Avatar asked Mar 17 '13 17:03

Reham


People also ask

Can Java run CMD?

Open the notepad and write a Java program into it. Save the Java program by using the class name followed by . java extension. Open the CMD, type the commands and run the Java program.

How do I run a command prompt as administrator in Java?

Runtime. getRuntime(). exec("c:/elevate Rundll32.exe Powrprof. dll,SetSuspendState ");

What is CMD in Java?

The java command-line argument is an argument i.e. passed at the time of running the java program. The arguments passed from the console can be received in the java program and it can be used as an input. So, it provides a convenient way to check the behavior of the program for the different values.


2 Answers

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

The following example changes to a different directory and runs dir from there. Admittedly, I could just dir that directory without needing to cd to it, but this is only an example:

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);         }     } } 

Note also that I'm 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\Luke\StackOverflow>java CmdTest  Volume in drive C is Windows7  Volume Serial Number is D8F0-C934   Directory of C:\Program Files\Microsoft SQL Server  29/07/2011  11:03    <DIR>          . 29/07/2011  11:03    <DIR>          .. 21/01/2011  20:37    <DIR>          100 21/01/2011  20:35    <DIR>          80 21/01/2011  20:35    <DIR>          90 21/01/2011  20:39    <DIR>          MSSQL10_50.SQLEXPRESS                0 File(s)              0 bytes                6 Dir(s)  209,496,424,448 bytes free 
like image 57
Luke Woodward Avatar answered Sep 17 '22 17:09

Luke Woodward


You can try this:-

Process p = Runtime.getRuntime().exec(command); 
like image 25
Rahul Tripathi Avatar answered Sep 21 '22 17:09

Rahul Tripathi