0

Javaでsystem execを使用して何かをしようとしています

Runtime.getRuntime().exec(command);

驚くべきことに、パス、ディレクトリ、およびファイルに関連するすべてがうまく機能していません

理由がわかりません。代替手段はありますか?

4

3 に答える 3

4

別の方法は、インターフェイスがややクリーンなProcessBuilderクラスを使用することですが、主な問題はおそらくOSがコマンドラインを処理する方法に関連しており、Javaがそれを支援するためにできることはあまりありません。

于 2012-06-27T09:25:10.450 に答える
2

上で述べたように、cd はシェルのビルトインです。つまり、実行可能ファイルではありません。これは、次を使用して決定できます。

$ which cd
cd: shell built-in command

スタンドアロンの実行可能ファイルでRuntime.exec()はないため、何も実行できません。

シェル固有の処理 (作業ディレクトリの変更など) を行うシェル スクリプトを作成し、Runtime.exec(). スクリプト内で PATH 変数などを設定し、Java をそのままにしてスクリプトを実行することができます。

人々を悩ませていることの 1 つは、スクリプトの stdout/stderr を消費しなければならないことです (たとえ破棄したとしても)。これを適切に行わないと、プロセスがブロックされる可能性があります。詳細については、この SO の回答を参照してください。

于 2012-06-27T09:37:21.087 に答える
0

exec() メソッドは 3 つの引数を取ることができます。3 番目は、サブプロセスが作業ディレクトリとして使用するディレクトリです。とにかく、それはあなたの「cd」の問題を解決します。

于 2012-10-12T22:26:21.643 に答える