ホームページ >Java >&#&チュートリアル >ProcessBuilder と Runtime.exec(): 外部コマンドの実行時に動作が異なるのはなぜですか?

ProcessBuilder と Runtime.exec(): 外部コマンドの実行時に動作が異なるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-15 02:54:02830ブラウズ

ProcessBuilder vs Runtime.exec(): Why Do They Behave Differently When Executing External Commands?

ProcessBuilder と Runtime.exec(): 不一致の分析

Java で外部コマンドを実行すると、ランタイム間で不一致が発生する可能性があります。 getRuntime().exec(...) と新しい ProcessBuilder(...).start()。次の説明は、これらの違いを明らかにし、一貫した動作を実現するためのソリューションを提供することを目的としています。

デフォルトの引数の処理

2 つのアプローチの主な違いの 1 つは、その処理にあります。引数の。 Runtime.getRuntime().exec() は単一の文字列または文字列の配列を期待しますが、ProcessBuilder は文字列の配列または文字列のリストを期待します。単一の文字列で exec() を使用する場合、内部で文字列をトークン化して引数配列を作成します。

ProcessBuilder の動作

ProcessBuilder の場合、引数が渡されます。配列またはリストとして指定します。各要素は引数を表します。ただし、文字列が適切にトークン化されていない場合は、スペースを含む単一の引数が形成されます。これにより、コマンドが正しく実行されなかった例のように、予期しない動作が発生する可能性があります。

解決策

ProcessBuilder でこの問題を解決するには、引数が次のとおりであることを確認してください。適切にトークン化されています:

または、リストを使用できます:

引数を事前にトークン化することで、目的の動作を実現できます。

以上がProcessBuilder と Runtime.exec(): 外部コマンドの実行時に動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。