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

前端 未结 3 1098
时光取名叫无心
时光取名叫无心 2020-12-29 05:31

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         


        
相关标签:
3条回答
  • 2020-12-29 06:27

    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.

    0 讨论(0)
  • 2020-12-29 06:28

    A different solution will be,

    Execute a .bat file from the Java Code

    And do all the directory change, and stuff inside the bat file

    For instance, my execute.bat file looks like this,

    cd flutter_app
    flutter build apk
    cd ..
    

    And the Java code looks like this,

    Process process = Runtime.getRuntime().exec("execute.bat");
    
    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题