Java Runtime exec不会抛出此类文件或拒绝权限
我的程序在ubuntu 10.04上运行,下面是代码: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
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编译我的程序,没关系,非常感谢。