对于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());