Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

execute file from defined directory with Runtime.getRuntime().exec

Tags:

java

shell

exec

I just want to execute my file from a specific folder. in my case /data/data/my-package/files/. So i tried :

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

It doesn't work. could anyone tell me please the right way to do that . Thanks

like image 585
113408 Avatar asked May 21 '12 16:05

113408


2 Answers

It should be possible to call the executable with a specific working directory using Runtime.exec(String command, String[] envp, File dir)

as follows:

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

maybe without the full path to myfile

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

Context#getFilesDir() instead of hardcoding the path should work too and is safer / cleaner than specifying the path yourself since it is not guaranteed that /data/data/.. is always the correct path for all devices.

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

The problem with cd somewhere is that the directory is changed for a different Process so the second call to exec in a new Process does not see the change.

like image 183
zapl Avatar answered Oct 19 '22 21:10

zapl


It works for me when I use the following overloaded method:

public Process exec(String command, String[] envp, File dir)

For example:

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

The command just stores the command you want to run in command line. dir just stores the path of your .jar file to be executed.

like image 36
user3437460 Avatar answered Oct 19 '22 21:10

user3437460