Running .bat / .cmd file with Java

I wanted to run a .cmd file with Java. I have something that works for me. Can someone help me understand the possible failures of my program.

import java.io.IOException;  

/* 
  How to run a batch .bat or .cmd file from Java? 
  1. I don't want the command window to open up. It should be in background. 
  2. Gracefully destroy any new process created. 
  3. Need to confirm the quality of the program with experts. 
 */  
public class RunBat {  
    public static void main(String args[]) {  
        Runtime run = Runtime.getRuntime();  
        //The best possible I found is to construct a command which you want to execute  
        //as a string and use that in exec. If the batch file takes command line arguments  
        //the command can be constructed a array of strings and pass the array as input to  
        //the exec method. The command can also be passed externally as input to the method.  

        Process p = null;  
        String cmd = "D:\\Database\\TableToCSV.cmd";  
        try {  
            p = run.exec(cmd);  
            p.getErrorStream();  
            System.out.println("RUN.COMPLETED.SUCCESSFULLY");  
        }  
        catch (IOException e) {  
            e.printStackTrace();  
            System.out.println("ERROR.RUNNING.CMD");  
            p.destroy();  
        }  
    }  
}  

Is my solution reliable? How can I make sure that no processes occur after .cmd is executed.

Thank.

+5
source share
4 answers

I do not know what you are doing with p.getErrorStream (), you are not using it.

The way to determine the result, that is, the exit code of the command being executed, is to add the following lines after

p = run.exec(cmd);
p.waitFor();
System.out.println(p.exitValue());

And put p.destroy () in the finally block.

Hope this helps.

+4
source

Run the command as:

cmd.exe /C d:\database\tabletoCSV.cmd

See cmd.exe /?for more information:

> cmd /?
Starts a new instance of the Windows command interpreter

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
   [[/S] [/C | /K] string]

/C      Carries out the command specified by string and then terminates
/K      Carries out the command specified by string but remains
[...]
+3
source

  • / .
  • exitValue.
  • ProcessBuilder?

,

    Process proc = null;
    Runtime rt = Runtime.getRuntime();
    try {
        proc = rt.exec(cmd);
        InputStream outCmdStream = proc.getInputStream();
        InputStreamReader outCmdReader = new InputStreamReader(outCmdStream);
        BufferedReader outCmdBufReader = new BufferedReader(outCmdReader);
        String outLine;
        while ((outLine = outCmdBufReader.readLine()) != null) {
            System.out.println(outLine);
        }
        InputStream errStream = proc.getErrorStream();
        InputStreamReader errReader = new InputStreamReader(errStream);
        BufferedReader errBufReader = new BufferedReader(errReader);
        String errLine;
        while ((errLine = errBufReader.readLine()) != null) {
            System.out.println(errLine);
        }
        int exitVal = proc.waitFor();
        System.out.println("Process exitValue: " + exitVal);

    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("ERROR.RUNNING.CMD");
        proc.destroy();
    }
}

,

+1

, : , , () , , . , , , . , .

Java ( 1.5), ProcessBuilder .

0

All Articles