ホームページ >Java >&#&チュートリアル >ProcessBuilder と Runtime.exec(): 外部コマンドの実行時に動作が異なるのはなぜですか?
ProcessBuilder と Runtime.exec(): 不一致の分析
Java で外部コマンドを実行すると、ランタイム間で不一致が発生する可能性があります。 getRuntime().exec(...) と新しい ProcessBuilder(...).start()。次の説明は、これらの違いを明らかにし、一貫した動作を実現するためのソリューションを提供することを目的としています。
デフォルトの引数の処理
2 つのアプローチの主な違いの 1 つは、その処理にあります。引数の。 Runtime.getRuntime().exec() は単一の文字列または文字列の配列を期待しますが、ProcessBuilder は文字列の配列または文字列のリストを期待します。単一の文字列で exec() を使用する場合、内部で文字列をトークン化して引数配列を作成します。
ProcessBuilder の動作
ProcessBuilder の場合、引数が渡されます。配列またはリストとして指定します。各要素は引数を表します。ただし、文字列が適切にトークン化されていない場合は、スペースを含む単一の引数が形成されます。これにより、コマンドが正しく実行されなかった例のように、予期しない動作が発生する可能性があります。
解決策
ProcessBuilder でこの問題を解決するには、引数が次のとおりであることを確認してください。適切にトークン化されています:
または、リストを使用できます:
引数を事前にトークン化することで、目的の動作を実現できます。
以上がProcessBuilder と Runtime.exec(): 外部コマンドの実行時に動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。