Dear all,
Could you tell me how to go about executing MSDOS commands thru Java. I tried with the Process class but it gives an error:2.
Could anyone please advise.
The error says:
-------------------------------------------------------------------------
Exception in thread "main" java.io.IOException: CreateProcess: start error=2
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.<init>(Unknown Source)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at Dos.main(Dos.java:5)
------------------------------------------------------------------
The program is:
---------------------------------------
import java.io.*;
public class Dos{
public static void main(String[] args) throws IOException{
Process p = Runtime.getRuntime().exec("start");
}
}
-------------------------------------------------
You will need to start a command interpreter in order to launch operating system level commands.
Under win32 that's done using the "cmd" command.
For example "cmd dir" would execute a dir command.
The entire system is rather tricky, I've never really gotten the hang of it (but then I've never tried to, preferring to keep my code operating system independent).
I've done a bit more R&D (you got me interested ), turns out it's trickier than it looks because you need to start a process and then start a process in that process and catch the output of that sub process.
As a minimum you'd end up with something like this (for a simple dir command):
System.out.println("Here is the standard output of the command:\n");
while((s = stdInput.readLine()) != null){
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while((s = stdError.readLine()) != null){
System.out.println(s);
}
Forget the /C option (as I initially did) and it will only start a command shell and just sit there forever waiting for that to terminate (which it won't as there's nothing ever telling it to close).