Выполнить файл из определенного каталога с помощью Runtime.getRuntime(). exec

Я просто хочу выполнить мой файл из определенной папки. в моем случае /data/data/my -package/files/. Поэтому я попытался:

 Process process2=Runtime.getRuntime().exec("cd /data/data/my-package/files/");
 process2.waitFor();
 process2=Runtime.getRuntime().exec("./myfile");

Это не работает. может ли кто-нибудь сказать мне, пожалуйста, правильный способ сделать это. Благодаря

Ответ 1

Должно быть возможным вызвать исполняемый файл с определенным рабочим каталогом, используя Runtime.exec(String command, String[] envp, File dir)

следующим образом:

Process process2=Runtime.getRuntime().exec("/data/data/my-package/files/myfile",
        null, new File("/data/data/my-package/files"));

возможно без полного пути к myfile

Process process2=Runtime.getRuntime().exec("myfile",
        null, new File("/data/data/my-package/files"));

Context#getFilesDir() вместо hardcoding путь должен работать тоже и безопаснее/чище, чем указывать путь самостоятельно, так как не гарантируется, что /data/data/.. всегда правильный путь для всех устройств.

Process process2=Runtime.getRuntime().exec("myfile",
        null, getFilesDir()));

Проблема с cd somewhere заключается в том, что каталог изменяется для другого Процесса, поэтому второй вызов exec в новом Процессе не видит изменения.

Ответ 2

Это работает для меня, когда я использую следующий перегруженный метод:

public Process exec (String команда, String [] envp, File dir)

Например:

File dir = new File("C:/Users/username/Desktop/Sample");
String cmd = "java -jar BatchSample.jar";
Process process = Runtime.getRuntime().exec(cmd, null, dir);

Команда просто хранит команду, которую вы хотите запустить в командной строке. dir просто хранит путь вашего файла .jar для выполнения.