Windows、Linux、macOSターミナルコマンドをJavaで実行し、完全な結果を返す方法

公開: 2019-02-26

Linuxコマンドmkdir、ls -ltra、およびpingをJavaで実行します

system commandの実行は比較的簡単です。最初に実行したことを確認したら。

これには、RuntimeクラスとProcessクラスの2つのJavaクラスの使用が含まれます。 基本的に、Runtimeクラスのexec methodを使用して、コマンドを別のプロセスとして実行します。

execメソッドを呼び出すと、サブプロセスを管理するためのProcessオブジェクトが返されます。 次に、 ProcessオブジェクトのgetInputStream() )メソッドとgetErrorStream()メソッドを使用して、コマンドの通常の出力とコマンドのエラー出力を読み取ります。 実行されたコマンドの出力で何をするかは、完全にあなたとあなたが作成しているアプリケーション次第です。

ProcessBuilder.start()メソッドとRuntime.execメソッドは、ネイティブプロセスを作成し、プロセスの制御とプロセスに関する情報の取得に使用できるProcessのサブクラスのインスタンスを返します。

クラスProcessは、プロセスからの入力の実行、プロセスへの出力の実行、プロセスの完了の待機、プロセスの終了ステータスの確認、およびプロセスの破棄(強制終了)のためのメソッドを提供します。

プロセスを作成するメソッドは、ネイティブウィンドウプロセス、デーモンプロセス、MicrosoftWindowsのWin16 / DOSプロセス、シェルスクリプトなど、特定のネイティブプラットフォームの特別なプロセスではうまく機能しない場合があります。

デフォルトでは、作成されたサブプロセスには独自のターミナルまたはコンソールがありません。 そのすべての標準I / O(つまり、stdin、stdout、stderr)操作は親プロセスにリダイレクトされ、 getOutputStream()getInputStream() 、およびgetErrorStream()メソッドを使用して取得されたストリームを介してアクセスできます。

親プロセスはこれらのストリームを使用して、サブプロセスに入力を供給し、サブプロセスから出力を取得します。 一部のネイティブプラットフォームでは、標準の入力ストリームと出力ストリームに限られたバッファサイズしか提供されないため、サブプロセスの入力ストリームの書き込みまたは出力ストリームの読み取りに失敗すると、サブプロセスがブロックされたり、デッドロックが発生したりする可能性があります。

以下は、参考のために2つの簡単なJavaの例です。

例-1。 Javaでmkdir、ls -ltra、およびpingを実行します

  • ファイルCrunchifyCommandJava.javaを作成します
  • mkdir /Users/ashah/Desktop/new-folder実行します
  • ls -ltra /Library実行します
  • ping crunchify.com実行します

システム設定に従って、上記のプログラムでパスを適宜変更してください。

Eclipseコンソールの出力:

上記のプログラムをJavaアプリケーションとして実行するだけで、同様の結果が得られます。

例-2。

  • CrunchifyRunCommand.java
  • コマンドps -fewを実行して、システムで実行されているすべてのプロセスのリストを取得します。

Eclipseコンソールの出力:

これらは私のMacBookProで実行されているプロセスの一部です。 かなりの数がありますが、貼り付けられたものはごくわずかです。

このチュートリアルが、単純なJavaプログラムを使用してLinux、macOSターミナルコマンドを実行するのに役立つことを願っています。 ご不明な点がございましたら、お気軽にお問い合わせください。