Estoy peleando con el error de espacios en el método de ejecución Runtime de Java. Esto es lo único sobre este problema: el comando que intento ejecutar es una cadena entrante y puede o no tener espacios y no necesariamente en un formato específico. De cualquier manera, necesito ejecutarlo. Si no hay espacios, estoy bien; si hay espacios, no soy tan bueno.Usando el comando de ejecución de Java cuando no se sabe si hay espacios
¿Cómo puedo tener en cuenta ambas circunstancias?
Información de bonificación sin cargo adicional: Uno de los grandes problemas parece ser que estoy tratando de llamar a un ejecutable en c: \ archivos de programa \ blablabla ... y el ejecutivo parece dividirse en el espacio después de 'c :\programa'. Estoy seguro de que también surgirán otros problemas para los parámetros.
Aquí hay un ejemplo más específico de los tipos de cadenas que podría obtener. Eso debería aclarar algunas de la confusión:
- c: \ SomeApp \ someapp.exe
- c: \ SomeApp \ someapp.exe -someParam = foo
- c: \ archivos de programa \ SomeApp \ SomeApp .exe
- c: \ archivos de programa \ SomeApp \ someapp.exe -someParam = bar
El primero funciona bien porque no tiene espacios. El segundo incluso está bien porque se divide en el espacio y utiliza el primero como comando y el segundo como parámetro. El tercer y cuarto ejemplo se dividen en el primer espacio, usan 'C: \ program' y el comando, 'archivos ...' y (en el caso de la cuarta cadena) '-someParam = bar' como parámetros.
¿Puede hacer algo de preprocesamiento de la cadena entrante? Si es así, puede usar Runtime.exec (String) [] cmdarray) método que manejará espacios para usted, suponiendo que usted puede romper la cadena entrante por argumentos – Benn
Garbage In, Garbage Out; no puede analizar una cadena sin sentido. Asegúrese de que el remitente escape de los espacios que desea retener, o poner las cadenas que se ejecutan juntas entre comillas, solo al hacerlo, su problema pasa de ser imposible a bastante difícil. –