我的程序在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”)
然后我将代码更改为:
Process process=Runtime.getRuntime().exec("/bin/ls",null,null);
它抛出以下异常:
Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied
我已将所有相关文件和目录的特权更改为777,所以我真的不知道这是怎么回事。
谢谢你的回复 。
Process process=Runtime.getRuntime().exec("ls",null,null);
这是一个No such file or directory
例外,因为ls
它很可能不在程序的当前工作目录中。当你ls
从Linux Shell提示符键入内容时,它使用PATH
环境变量将其转换ls
为/bin/ls
。 Runtime
不会为你这样做。
你需要指定完整路径"/bin/ls"
。如@Ernest所述,你应该使用Runtime.exec("/bin/ls")
方法,而不要传递null参数。
Process process=Runtime.getRuntime().exec("/bin/ls");
你的评论似乎表明,即使你使用此调用,你也会遇到Permission denied
异常。这从标准Java可执行文件为我工作。我假设你可以/bin/ls
从Linux命令行成功完成操作? /bin/ls
(以及相关的目录)应该是755,而不是777,这将是安全的噩梦。但是777应该可以工作。
也许你正在运行某种受保护的JDK?例如,出于安全原因,小程序没有执行Unix命令的权限。也许你有一个限制性Java策略文件,并且需要添加execute
权限?
谢谢您的答复,我发现原因是我的eclipse内置编译器不是标准的sun-jdk,它是开放的jdk,现在我用ant来用sun-jdk-javac编译我的程序,很好,谢谢。很多。