Runtime.getRuntime().exec()

I can not read a file only when database name contains like (new database (myid) etc. I give a following example code:

dumpCommand = "C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump -h"+hostName+user+databaseName;
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(dumpCommand);                     
InputStream in = proc.getInputStream();              
BufferedReader br=new BufferedReader(new InputStreamReader(in));
String line =null;

 while((line=br.readLine())!=null)
{
//able to read line only when database name like abc,datastore etc...
System.out.println(line);
    }

Suppose my database name de mo means when I print line I got database name like de only. Is possible when database name with empty space?


Are you familiar with the exec double-quotes bug? (for Runtime.exec or ProcessBuilder)

You can try:

Runtime.getRuntime().exec(new String[] {
  "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\"", 
  "-h", 
  hostName+user+databaseName});

Just make sure none of your parameters you will have to pass contains double quotes (while not beginning with double quotes)
(see bug 6511002)

Any parameter like:

mykey="my value with space"

would be changed internally (by the getRuntime() implementation) into

"mykey="myvalue with space""

If that is the case, you would need to tokenize the argument:

{"mykey=\"my\"" , "\"value with space\""}

The file path contains blanks, that may be (one of) the problem(s). Try this instead:

dumpCommand = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\" -h"
               +hostName+user+databaseName;

and follow phisch's suggstion to print the dumpCommand String to double check that it's a valid mysqldump call