21

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

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

它不起作用。谁能告诉我正确的方法。谢谢

4

3 回答 3

43

应该可以使用特定的工作目录调用可执行文件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在新进程中的第二次调用看不到更改。

于 2012-05-21T18:52:10.480 回答
2

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

公共进程执行(字符串命令,字符串 [] 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 文件的路径。

于 2019-01-11T12:53:50.260 回答
0

一个不同的解决方案是,

从 Java 代码执行 .bat 文件

并进行所有目录更改,以及 bat 文件中的内容

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

cd flutter_app
flutter build apk
cd ..

Java代码看起来像这样,

Process process = Runtime.getRuntime().exec("execute.bat");
于 2020-08-13T21:33:02.100 回答