2010-01-27 11 views
8

No puedo leer un archivo sólo cuando el nombre de la base de datos contiene como (nueva base de datos (myid), etc. Doy un ejemplo de código siguiente:Runtime.getRuntime exec()()

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

Supongamos que mi base de datos el nombre de mo significa que cuando imprimo línea llegué nombre de la base como la única de. es posible cuando el nombre de base de datos con el espacio vacío?

Respuesta

15

¿Está familiarizado con el insecto exec comillas dobles?(Por Runtime.exec o ProcessBuilder)

Usted puede tratar de:

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

Sólo asegúrese de que ninguno de sus parámetros que tendrá que pasar contiene comillas dobles (mientras no comenzando con comillas dobles)
(ver bug 6511002)

Cualquier parámetro como:

mykey="my value with space" 

sería cambiado internamente (por la aplicación getRuntime()) en

"mykey="myvalue with space"" 

Si ese es el caso, usted tendría que tokenize el argumento:

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

parece mysqldump sintaxis es un poco diferente. a continuación es mi ejemplo de trabajo mysqldump -h mysserver -u root -p my_db -R> create_db.sql Creo que deberías e "" o `` para nombres complejos (no me he marcado).

0

No estoy seguro de si entiendo su pregunta en su totalidad, pero su dumpCommand parece concatenar todas las variables (hostName, user, databaseName) en una cadena grande.

Hacer un System.out.println (dumpCommand); y mira si eso es lo que realmente quieres ejecutar.

Es probable que falten algunos espacios aquí.

Si el "-" en sí mismo es un problema, es posible que desee evitarlo, de lo contrario, mysqldump pensará que es un parámetro.

2

Java y el sistema operativo necesitan saber cuál es el comando y cuáles son los argumentos. Por lo tanto:

1) Usted puede tratar de utilizar exec(String, String[]) para proporcionar el CMD y los argumentos por separado

2) Se puede encerrar el comando mysqldump y cada argumento entre comillas dobles para el sistema operativo para saber sus cosas simples.

Si usa la opción (1), el programa mysqldump recibirá un argumento por elemento en la matriz, sin importar los espacios o lo que sea.

2

La ruta del archivo contiene espacios en blanco, que pueden ser (uno de) el (los) problema (s). Prueba este lugar:

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

y siga suggstion de phisch para imprimir la cadena dumpCommand que vuelva a comprobar que se trata de una llamada mysqldump válida

Cuestiones relacionadas