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

21

我想从特定的文件夹中执行我的文件,例如在我的情况下是 /data/data/my-package/files/。 所以我尝试了:

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

它不起作用。有人能告诉我正确的方法吗?谢谢。


....exec("/data/data/my-package/files/myfile"); 这段代码能正常工作吗? - zapl
它可以工作,但我想从指定的文件夹中执行我的文件,因为它会生成一个新文件。谢谢。 - 113408
你可以查看[我的回答][https://dev59.com/Rmw15IYBdhLWcg3wIYO_#42281455]。 - David Hazani
3个回答

44

使用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 时看不到更改。


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);

这个命令只是将你想要在命令行中运行的命令存储起来。而dir则是存储要执行的.jar文件的路径。


0
一个不同的解决方案将是,
从Java代码执行一个.bat文件
并在bat文件中完成所有目录更改和相关操作。
例如,我的execute.bat文件如下所示:
cd flutter_app
flutter build apk
cd ..

而Java代码看起来像这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接