2012-06-14 27 views
5

Mi programa se está ejecutando en Ubuntu 10.04, y aquí está el código:de ejecución de Java ejecutivo no arroja existe el fichero o se deniega el permiso

Process process=Runtime.getRuntime().exec("ls",null,null); 

que una excepción de:

Cannot run program "ls": java.io.IOException: error=2, No such file or directory, 

y he intentado para cambiar "ls" a "chmod", "pwd", no encontré que funcione ningún comando de shell, todos llegaron al mismo problema. (También probé "/ bin/sh -c ls")

y luego cambie el código a:

Process process=Runtime.getRuntime().exec("/bin/ls",null,null); 

que una excepción de:

Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied 

He cambiado privilegio de todos los archivos y directorios a 777 relacionados, así que realmente no sé lo que está mal con él.

Gracias por sus respuestas.

Respuesta

2
Process process=Runtime.getRuntime().exec("ls",null,null); 

Con ello se espera dar una excepción No such file or directory ya que es muy probable que no esté en el directorio de trabajo actual de su programa de ls. Cuando escribe ls desde el indicador del shell de Linux, usa la variable de entorno PATH para convertir ls en /bin/ls. Runtime no hace esto por usted.

Debe especificar la ruta completa "/bin/ls". Como @Ernest mencionó, debe usar el método Runtime.exec("/bin/ls") y no pasar los argumentos nulos.

Process process=Runtime.getRuntime().exec("/bin/ls"); 

Sus comentarios parecen indicar que, incluso cuando se utiliza esta llamada, que está recibiendo una excepción Permission denied. Esto funciona para mí desde un ejecutable Java estándar. Supongo que puede hacer un /bin/ls desde la línea de comandos de Linux con éxito? /bin/ls (y los directorios asociados) deben ser 755 y no 777 lo que sería una pesadilla de seguridad. Pero 777 debería funcionar.

¿Tal vez está ejecutando algún tipo de JDK protegido? Los applets, por ejemplo, no tienen permisos para ejecutar comandos de Unix por razones de seguridad. Tal vez tiene un restrictivo Java policy file y necesita agregar execute permisos?

+0

Gracias por su respuesta, me parece que la razón es que el compilador build-in de mi eclipse no es estándar sun-jdk, está abierto jdk, ahora uso ant y compilando mi programa con sun-jdk-javac, está bien, Muchas gracias. – libing

Cuestiones relacionadas