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

Java Runtime exec不会抛出此类文件或拒绝权限,java,ubuntu,runtime.exec,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, Cannot run program "/bin/ls": java.io.IOException: error=13, Permiss

我的程序在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,  
Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied
我试着把“ls”改为“chmod”,“pwd”,我发现没有一个shell命令可以工作,都遇到了同样的问题。(我还试过了“/bin/sh-cls”)

然后我将代码更改为:

Process process=Runtime.getRuntime().exec("/bin/ls",null,null);
它引发以下异常:

Cannot run program "ls": java.io.IOException: error=2, No such file or directory,  
Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied
我已经将所有相关文件和目录的权限更改为777,所以我真的不知道它出了什么问题

谢谢你的回复

Process process=Runtime.getRuntime().exec("ls",null,null);
由于
ls
很可能不在程序的当前工作目录中,因此这将导致
无此类文件或目录
异常。在Linux shell提示符中键入
ls
时,它使用
PATH
环境变量将
ls
转换为
/bin/ls
<代码>运行时不会为您执行此操作

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

Process process=Runtime.getRuntime().exec("/bin/ls");
您的评论似乎表明,即使在您使用此调用时,您也会收到一个
权限被拒绝的
异常。这在标准Java可执行文件中适用。我假设您可以从Linux命令行成功地执行
/bin/ls
/bin/ls
(以及相关目录)应该是755而不是777,这将是一个安全噩梦。但777应该有效


也许您正在运行某种受保护的JDK?例如,出于安全原因,小程序没有执行Unix命令的权限。也许你有一个限制,你需要添加
执行
权限?

谢谢你的回复,我发现原因是我的eclipse内置编译器不是标准的sun jdk,它是开放的jdk,现在我用ant用sun jdk javac编译我的程序,没关系,非常感谢。