Java Runtime exec不会抛出此类文件或权限

时间:2012-06-14 11:17:52

标签: java ubuntu runtime.exec

我的程序在ubuntu 10.04上运行,这是代码:

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

它抛出了一个例外:

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

我尝试将“ls”更改为“chmod”,“pwd”,我发现没有一个shell命令工作,都遇到了同样的问题。(我也试过“/ bin / sh -c ls”)< / p>

然后我将代码更改为:

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

它抛出了一个例外:

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

我已将所有相关文件和目录的权限更改为777,所以我真的不知道它有什么问题。

感谢您的回复。

1 个答案:

答案 0 :(得分:2)

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

由于No such file or directory很可能不在您程序的当前工作目录中,因此预计会出现ls异常。当您从Linux shell提示符键入ls时,它会使用PATH环境变量将ls转换为/bin/lsRuntime不会为您执行此操作。

您需要指定完整路径"/bin/ls"。正如@Ernest所提到的,你应该使用Runtime.exec("/bin/ls")方法而不是传入空参数。

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

您的评论似乎表明即使您使用此次通话,也会收到Permission denied个例外情况。这对我来说是标准的Java可执行文件。我假设您可以成功从Linux命令行执行/bin/ls/bin/ls(以及相关目录)应该是755而不是 777,这将是一场安全噩梦。但777应该可行。

也许您正在运行某种受保护的JDK?例如,出于安全原因,Applet无权执行Unix命令。也许你有一个限制性的Java policy file,你需要添加execute权限吗?