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

时间:2012-05-21 16:44:04

标签: java shell exec

我只想从特定文件夹执行我的文件。在我的情况下/ data / data / my-package / files /。 所以我试过了:

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

它不起作用。请问有没有人能以正确的方式告诉我。感谢

3 个答案:

答案 0 :(得分:31)

应该可以使用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()而不是硬编码路径也应该工作,并且比自己指定路径更安全/更清洁,因为不能保证/data/data/.. 始终是所有设备的正确路径。

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

cd somewhere的问题是,对于其他进程更改了目录,因此在新进程中第二次调用exec时看不到更改。

答案 1 :(得分:1)

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

  

public Process exec(字符串命令,              字符串[] envp,              文件目录)

例如:

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文件的路径。

答案 2 :(得分:0)

一个不同的解决方案,

从Java代码执行.bat文件

执行所有目录更改,并将内容填充到bat文件中

例如,我的execute.bat文件如下所示,

cd flutter_app
flutter build apk
cd ..

Java代码如下:

Process process = Runtime.getRuntime().exec("execute.bat");