代码之家  ›  专栏  ›  技术社区  ›  James Skidmore

chmod命令的Java中出现权限被拒绝错误

  •  11
  • James Skidmore  · 技术社区  · 14 年前

    我有一个可执行文件(ffmpeg),我正试图在Mac上用Java程序运行它。我用Java程序发送命令 chmod 777 /path/to/ffmpeg

    java.io.IOException: Cannot run program "/Users/james/WalkTheHall/ffmpeg": error=13, Permission denied
    

    但当我跑的时候 chmod 777/path/to/ffmpeg 在打开Java应用程序之前,我自己从Terminal开始,ffmpeg的命令在Java程序中可以正常运行。

    打电话有什么区别吗 chmod

    5 回复  |  直到 11 年前
        1
  •  4
  •   Community Egal    7 年前

    我猜是的 chmod 是shell命令,不是可执行文件。试着跑步 奇莫德 穿过你的壳。更多详情请参见: Want to invoke a linux shell command from Java

        2
  •  7
  •   macrokigol    13 年前

    我的代码也有同样的问题。 我通过在exec之后添加waitFor来解决这个问题。当执行下一个命令时,“chmod”进程没有完成。代码可能如下所示:

    p = Runtime.getRuntime.exec("chmod 777 xxx");
    p.waitFor();
    Runtime.getRuntime.exec("./xxx");
    
        3
  •  4
  •   Ryan Hayes    14 年前

        4
  •  2
  •   putgeminmouth    14 年前

    我目前正在做一个项目,它也在OSX上使用FFMpeg。我将FFMpeg存储在JAR中,并将其提取出来,然后像您所做的那样设置可执行文件。我就是这么做的,而且似乎很管用。

    public static void setExecutable(File file, boolean executable)
    {
        Process p = Runtime.getRuntime().exec(new String[] {
            "chmod",
            "u"+(executable?'+':'-')+"x",
            file.getAbsolutePath(),
        });
        // do stuff to make sure p finishes & capture output
    }
    

    代码是GPL,所以请随意查看。它不是最好的代码库,甚至FFMpeg的内容也可能过于复杂,但它是有效的。

    http://korsakow.net

    这两个文件对你来说可能特别有趣

    FFMpegEncoderOSX.java

    FileUtil.java

        5
  •  2
  •   Jefferson Lima    5 年前

    试试这个:

    File commandFile = new File("myFile.txt");
    commandFile.setExecutable(true);
    Process p = Runtime.getRuntime.exec(commandFile.getAbsoluteFile());
    
        6
  •  0
  •   Lukas Schramm    4 年前

    要在OSX上启动程序,您需要:

    Runtime.getRuntime().exec("chmod 777 "+path);   //in order to execute it
    Runtime.getRuntime().exec(path);                //execute it
    Runtime.getRuntime().exec("chmod 744 "+path);   //undo every change
    

    path应该是程序exc的路径,例如: