У меня есть исполняемый файл (ffmpeg), что я пытаюсь работать с программой Java на Mac. Я использовал программу Java для отправки команды chmod 777 /path/to/ffmpeg
, но когда я пытаюсь выполнить ffmpeg, я получаю следующую ошибку:
java.io.IOException: Cannot run program "/Users/james/WalkTheHall/ffmpeg": error=13, Permission denied
Но когда я работаю chmod 777 /path/to/ffmpeg
от Терминала самостоятельно прежде, чем открыть JAVA-приложение, команда к ffmpeg будет работать очень хорошо в программе Java.
Есть ли различие между вызовом chmod
из программы Java и вызова его самостоятельно? Почему это не будет работать?Спасибо!
Я предполагаю, что chmod
- это команда оболочки, а не исполняемый файл. Попробуйте запустить chmod
через вашу оболочку. Подробнее см. Здесь: Хотите вызвать команду оболочки Linux из Java
Да, разница есть. Когда вы запускаете команду с терминала, это вы выполняете действие, и, следовательно, оно выполняется с использованием ваших учетных данных. Приложение Java выполняет команду, используя разрешения приложения Java. Это сделано для предотвращения запуска приложения и последующего внесения опасных и нежелательных изменений в файловую систему. Возможно, кто-то другой может уточнить и дать рекомендации по обходному пути для этого.
В настоящее время я работаю над проектом, который также использует FFMpeg на OSX. Я храню 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
Эти два файла, в частности, могут быть вам интересны