ホームページ > Java > &#&チュートリアル > Runtime.exec() と ProcessBuilder.start(): それぞれをいつ使用する必要がありますか?

Runtime.exec() と ProcessBuilder.start(): それぞれをいつ使用する必要がありますか?

Susan Sarandon
リリース: 2024-11-13 15:22:02
オリジナル
878 人が閲覧しました

Runtime.exec() vs. ProcessBuilder.start(): When Should I Use Each?

ProcessBuilder と Runtime.exec(): 違いを理解する

Java から外部コマンドを実行しようとすると、開発者は多くの場合、矛盾に遭遇します。 Runtime.exec() との間の動作ProcessBuilder.start().

Runtime.exec():

Runtime.getRuntime().exec() の使用には、トークン化と実行の 2 段階のプロセスが含まれます。 。入力文字列は実行前に解析され、引数の配列に変換されます。

ProcessBuilder:

対照的に、ProcessBuilder の動作は異なります。そのコンストラクターは、可変引数配列または文字列のリストを受け入れます。各文字列は個々の引数を表します。次に、引数は 1 つの文字列に結合され、オペレーティング システムに渡されます。

実行への影響:

この引数処理の違いは、指示。たとえば、コマンドにスペースが含まれている場合、Runtime.exec() は自動的にトークン化を処理しますが、ProcessBuilder では引数の配列またはリストを明示的に作成する必要があります。

例:

スペースを含む次のコマンドを考えてみましょう:

使用Runtime.exec():

この場合、コマンドは意図したとおりに実行され、exitValue は 0 になります。

Using ProcessBuilder:

ただし、トークン化せずに ProcessBuilder を直接使用するとエラーが発生しますまたは予期しない動作が発生し、exitValue 1001 が返されます。これを修正するには、引数配列を明示的に作成する必要があります:

概要:

一般に、 ProcessBuilder では、引数を個別のリストまたは配列として提供し、個々の引数を明示的に示すことが重要です。この追加手順により、引数が正しく解析され、外部コマンドが意図したとおりに実行されることが保証されます。

以上がRuntime.exec() と ProcessBuilder.start(): それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート