使用 Runtime.getRuntime().exec 从定义的目录中执行文件

2022-09-02 02:58:08

我只想从特定文件夹执行我的文件。在我的情况下 /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 命令,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()而不是硬编码路径也应该工作,并且比自己指定路径更安全/更干净,因为不能保证始终是所有设备的正确路径。/data/data/..

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

问题在于,不同进程的目录已更改,因此在新进程中第二次调用时看不到更改。cd somewhereexec


答案 2

当我使用以下重载方法时,它对我有用:

public Process exec(String command, 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);

该命令仅存储要在命令行中运行的命令。 只需存储要执行.jar文件的路径即可。dir


推荐