web-dev-qa-db-ja.com

Runtime.getRuntime()。execで定義されたディレクトリからファイルを実行します

特定のフォルダからファイルを実行したいだけです。私の場合は/ data/data/my-package/files /です。だから私は試した:

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

動作しません。誰かが私にそれを行う正しい方法を教えてくれるでしょうか?ありがとう

18
113408

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回目の呼び出しでは変更が認識されないことです。

35
zapl

次のオーバーロードメソッドを使用すると、うまくいきます。

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ファイルのパスを格納するだけです。

1
user3437460