Runtime.exec no funciona

Estoy tratando de ejecutar el siguiente código para intercambiar nombres de archivo. Estoy utilizando Runtime.exec . El código lanza IOException . ¿Cualquier forma de arreglar esto?

 try { Runtime.getRuntime().exec("file1=" + folderpath + " && file2=/mnt/sdcard/fsimages && temp=\"$(/system/xbin/mktemp -dp /mnt/sdcard)\" && /system/xbin/mv \"$file1\" $temp && /system/xbin/mv \"$file2\" \"$file1\" && /system/xbin/mv $temp/\"$file1\" \"$file2\""); } catch (IOException e) { e.printStackTrace(); return; } 

Y el error:

02-28 07: 48: 02.936: W / System.err (14399): java.io.IOException: Error al ejecutar exec (). Comando: [file1 = / mnt / sdcard / fsimages_3, &&, file2 = / mnt / sdcard / fsimages, &&, temp = "$ (/ system / xbin / mktemp, -dp, / mnt / sdcard) system / xbin / mv, "$ file1", $ temp, &&, / system / xbin / mv, "$ file2", "$ file1" "$ file2"] Directorio de trabajo: null Medio ambiente: null

Parece que Runtime.exec está insertando un coma antes y después de cada && . Parece que el problema está en la forma en que Runtime.exec interpreta && . ¿Por qué está pasando esto? ¿Cómo puedo evitar esto?

Si utiliza la sobrecarga Runtime.exec(String) , la cadena se tratará como un comando y sus argumentos y se dividirá en subcadenas en los límites de espacios blancos. Esta división es un comportamiento estándar para esa sobrecarga. (Consulte el javadoc.)

Runtime.exec(...) espera un comando nativo y sus argumentos. Ha proporcionado una línea de entrada de shell. Los métodos exec no entienden la entrada de la shell y no saben cómo ejecutarla correctamente. Y la división cruda (ver arriba) desordena todo.

Si necesita hacerlo, utilice lo siguiente:

 String yourShellInput = "echo hi && echo ho"; // or whatever ... String[] commandAndArgs = new String[]{ "/bin/sh", "-c", yourShellInput }; Runtime.getRuntime().exec(commandAndArgs); 

Esto es equivalente a ejecutar:

 $ /bin/sh -c "echo hi && echo ho". 
  • No pudo encontrar herramientas de compilación revisión 21.1.1 - sdk actualizado
  • ¿Cómo evitar las filtraciones de Eclipse en XServer al editar archivos XML de Android?
  • Adb no muestra el dispositivo nexus 5
  • Tamaño de la página RAM de Android?
  • Comando ndk-build no se encuentra en el terminal de Ubuntu
  • ¿Emulador Android se ejecutará automáticamente con aceleración de hardware si se instala KVM y se seleccionó la GPU Host de uso en el momento de la creación de AVD?
  • ADB repentinamente no detecta mi dispositivo
  • ¿Cómo usar el comando su sobre adb shell?
  • [Error: Error al encontrar la variable de entorno 'ANDROID_HOME'. Intente configurarlo manualmente
  • Emulador de Android en Yakkety Yak (Ubuntu 16.10)
  • ¿Cómo escribir el programa de servidor nativo nativo (no aplicación) para dispositivos Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.