Windowsバッチファイルを実行するためのJavaクラスはありますか?たとえば、バッチファイルを開始し、バッチ実行の結果を受け取りますか?
5 に答える
ApacheCommonsExecは良い方法です。純粋なProcessBuilderまたはRuntime.execを使用する場合に発生するいくつかの問題を解決します。
プロジェクトの説明から:
Javaから外部プロセスを実行することは、よく知られている問題領域です。これは本質的にプラットフォームに依存し、開発者はプラットフォーム固有の動作を知ってテストする必要があります。たとえば、Windowsでcmd.exeを使用したり、デッドロックの原因となるバッファサイズが制限されたりします。これに対するJREのサポートは非常に制限されていますが、新しいJava SE1.5ProcessBuilderクラスの方が優れています。
通常のProcessBuilder
ものは、バッチファイルで機能しRuntime#exec
ます。実行しているコマンドはです。cmd.exe
バッチファイル名はその引数です。引数の順序は、、、だとcmd.exe
思い/c
ますbatch_file_name
。(編集:うん、そして実際、私はここでこの質問がSOで重複しているという質問を見つけました。それは答えの中にあります。)
Runtime.getRuntime().exec("cmd /c start batFileName.bat");
動作するはずです。ただし、Javaプロセスからの出力を読み取るにはstart
、上記のコマンドから削除します。
はい、私の知識によれば、RunTimeクラスはできます。そしてもちろん、ProcessBuilderもそのようです。Javaを使用して多数のバッチファイルを実行しました。以下はグーグル検索結果です。同様に重要なリンクがあります
ネイティブJavaを使用し、サードパーティパッケージを使用しない場合は、とを使用してこれを試してRuntime
くださいProcess
。私は世界で最高のJavaコーダーではありませんが、これで必要なものが得られるはずです。入力ストリームからすべてを読み取るためのループを追加するには、いくつかの変更が必要になる場合があります。
import java.util.*;
import java.lang.*;
import java.io.*;
public class test
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process batch = rt.exec("test.bat");
batch.waitFor();
//exitValue() contains the ERRORLEVEL from batch file
System.out.println(batch.exitValue());
//getInputStream will get all output from stdout
//getErrorStream will get all error output from stderr
InputStream inStream = batch.getInputStream();
byte[] text = new byte[inStream.available()];
inStream.read(text);
System.out.println(new String(text));
}
catch (IOException ex)
{
}
catch (InterruptedException ex)
{
}
}
}