studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java terminal runtime runtime.exec cd

programacion - ¿Cómo usar el comando "cd" usando el tiempo de ejecución de Java?



manual de programacion android pdf (7)

¿Ha explorado este comando exec para un tiempo de ejecución de Java, cree un objeto de archivo con la ruta que desea "cd" y luego ingréselo como un tercer parámetro para el método exec?

public Process exec(String command, String[] envp, File dir) throws IOException

Ejecuta el comando de cadena especificado en un proceso separado con el entorno y el directorio de trabajo especificados.

Este es un método de conveniencia. Una invocación de la forma exec (command, envp, dir) se comporta exactamente de la misma manera que la invocación exec (cmdarray, envp, dir), donde cmdarray es una matriz de todas las fichas en el comando.

Más precisamente, la cadena de comando se divide en tokens utilizando un StringTokenizer creado por la llamada nuevo StringTokenizer (comando) sin ninguna modificación adicional de las categorías de caracteres. Los tokens producidos por el tokenizador se colocan en la nueva matriz de cadenas cmdarray, en el mismo orden.

Parameters: command - a specified system command. envp - array of strings, each element of which has environment variable settings in the format name=value, or null if the subprocess should inherit the environment of the current process. dir - the working directory of the subprocess, or null if the subprocess should inherit the working directory of the current process. Returns: A new Process object for managing the subprocess Throws: SecurityException - If a security manager exists and its checkExec method doesn''t allow creation of the subprocess IOException - If an I/O error occurs NullPointerException - If command is null, or one of the elements of envp is null IllegalArgumentException - If command is empty

He creado una aplicación java independiente en la que estoy intentando cambiar el directorio utilizando el comando "cd" en el terminal Ubuntu 10.04. He usado el siguiente código.

String[] command = new String[]{"cd",path}; Process child = Runtime.getRuntime().exec(command, null);

Pero el código anterior da el siguiente error

Exception in thread "main" java.io.IOException: Cannot run program "cd": java.io.IOException: error=2, No such file or directory

¿Alguien por favor me puede decir cómo implementarlo?


Este comando funciona bien

Runtime.getRuntime().exec(sh -c ''cd /path/to/dir && ProgToExecute)


Intente usar:

Runtime.getRuntime.exec("cmd /c cd path");

Esto funciono

Runtime r = Runtime.getRuntime(); r.exec("cmd /c pdftk C://tmp//trashhtml_to_pdf//b.pdf C://tmp//trashhtml_to_pdf//a.pdf cat output C://tmp//trashhtml_to_pdf//d.pdf");

Lo de abajo no funcionó Mientras que el comando array no funcionó

String[] cmd = {"cmd /c pdftk C://tmp//trashhtml_to_pdf//b.pdf C://tmp//trashhtml_to_pdf//a.pdf cat output C://tmp//trashhtml_to_pdf//d.pdf"}; r.exec(cmd);

FYI estoy usando la utilidad para verificar el sistema operativo si sus ventanas anteriores funcionarán para otras que no sean windows remove cmd / / c


No hay un ejecutable llamado cd , porque no se puede implementar en un proceso separado.

El problema es que cada proceso tiene su propio directorio de trabajo actual y la implementación de cd como un proceso separado solo cambiaría el proceso del directorio de trabajo actual.

En un programa Java, no puede cambiar su directorio de trabajo actual y no debería hacerlo. Simplemente use rutas de archivos absolutas.

El único caso en el que importa el directorio de trabajo actual es la ejecución de un proceso externo (utilizando ProcessBuilder o Runtime.exec() ). En esos casos, puede especificar el directorio de trabajo a usar explícitamente para el proceso recién iniciado ( ProcessBuilder.directory() y los tres argumentos Runtime.exec() respectivamente).

Nota: el directorio de trabajo actual se puede leer desde la propiedad del sistema user.dir . Puede sentirse tentado a establecer esa propiedad del sistema. Tenga en cuenta que al hacerlo se producirán incoherencias muy graves , ya que no se debe poder escribir .


Resolví esto haciendo que la aplicación Java ejecutara un script sh que estaba en el mismo directorio y luego en el script sh había hecho el "cd".

Se requería que hiciera un "cd" a un directorio específico para que la aplicación de destino pudiera funcionar correctamente.


Usando uno de los métodos del generador de procesos, podríamos pasar el directorio donde esperamos que se ejecute el cmd. Por favor vea el siguiente ejemplo. Además, puede mencionar el tiempo de espera para el proceso, utilizando el método de espera para el método.

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmd).directory(new File(path)); Process p = builder.start(); p.waitFor(timeoutSec, TimeUnit.SECONDS);

En el código anterior, puede pasar el objeto de archivo de la ruta [donde esperamos que se ejecute el cmd] al método de directorio de ProcessBuilder