对于chmod命令,Java中的权限被拒绝错误
我有一个可执行文件(ffmpeg),我试图在Mac上运行Java程序。 我使用Java程序将命令chmod 777 /path/to/ffmpeg
,但是当我尝试运行ffmpeg时,出现以下错误:
java.io.IOException: Cannot run program "/Users/james/WalkTheHall/ffmpeg": error=13, Permission denied
但是当我在打开Java应用程序之前自己从终端运行chmod 777 /path/to/ffmpeg
,ffmpeg的命令将在Java程序中正常运行。
在Java程序中调用chmod
并自己调用它是否有区别? 为什么它不起作用? 谢谢!
我猜测chmod
是一个shell命令,而不是一个可执行文件。 尝试通过shell运行chmod
。 在这里查看更多详细信息: 想要从Java调用linux shell命令
我的代码中遇到了同样的问题。 我通过在exec之后添加waitFor来解决这个问题。 执行下一个命令时,“chmod”进程未完成。 代码可能如下所示:
p = Runtime.getRuntime.exec("chmod 777 xxx"); p.waitFor(); Runtime.getRuntime.exec("./xxx");
是,有一点不同。 从终端运行命令时,您正在执行操作,因此使用您的凭据执行该操作。 Java应用程序使用Java应用程序的权限运行该命令。 这是为了防止应用程序运行,然后对文件系统进行危险的,不需要的更改。 也许其他人可以为此进行详细说明并为解决方法提供指导。
我目前正在开发一个在OSX上也使用FFMpeg的项目。 我将FFMpeg存储在JAR中并提取它并在使用时设置可执行文件,就像您似乎正在做的那样。 这就是我的工作,似乎有效。
public static void setExecutable(文件文件,布尔可执行文件) { 进程p = Runtime.getRuntime()。exec(new String [] { “CHMOD”, “U” +(可执行 '+': ' - '?)+ “X”, file.getAbsolutePath() }); //做一些确保p完成和捕获输出的东西 }
代码是GPL,所以请随时查看。 它不是最好的代码库,甚至FFMpeg的东西也许过于复杂,但它确实有效。
来源可在http://korsakow.net查看
特别是这两个文件对您来说可能很有趣
FFMpegEncoderOSX.java
FileUtil.java
尝试这个:
commandFile.setExecutable(true); Process p = Runtime.getRuntime.exec(commandFile.getAbsoluteFile());