2012-01-17 9 views
0

以下のようなサンプルJavaコードがあります。ウィンドウでJAVAのCMDファイルを正しく呼び出すにはどうすればいいですか?

String testEfdDirectoryPath="D:\\test"; 
    String efdExecutable = "test.cmd"; 
    File executableFile = new File(testEfdDirectoryPath, efdExecutable); 
    ProcessBuilder pb=new ProcessBuilder(); 
    $$pb.command("cmd.exe","/C",executableFile.toString());$$ 
    pb.directory(new File(testEfdDirectoryPath)); 
    Process p=pb.start(); 
    int code=p.waitFor(); 
    System.out.print(code); 

実際には、別のJavaアプリケーションへの呼び出しがあります。出力をリダイレクトするために$$マークされた行を次のように変更しない限り、別のJavaアプリケーションを起動することはできません。

pb.command("cmd.exe","/C",executableFile.toString(),">output.txt"); 

あなたにはアイデアがありますか?前もって感謝します。 :)

答えて

2

あなたの子プロセスは、(数キロバイトを超える)多くの出力を生成しますか?そのような場合は、プロセスからその出力を読み取る必要があります。あなたは試してみてください:

  1. は、繰り返し。これは、1つのスレッドで可能かもしれないpb.getInputStream()とエラーストリーム

から読み取るのでpb.getOutputStream().close()

  • 、プロセスのstdinを閉じるプロセスを開始
  • または複数のスレッドで実行できます。とにかく、上記の説明をキーワードのリストとして取り上げて、そのようなことがうまくいくオープンソースアプリケーションから信頼できるサンプルコードスニペットを探してみてください。

    http://commons.apache.org/exec/がお手伝いできます。

  • +0

    ありがとう、ローランド。あなたが正しいです。私はこの問題がProcessBuilderのjavadocで述べられていることを発見しました。 – Smartmarkey

    0

    Windowsはスクリプトを直接実行できません。 .cmdファイルをダブルクリックすると、実際にはcmd.exeというファイルが開きます。だからcmd.exe E:\\test\\test.cmdを試してください。

    +0

    申し訳ありませんが明確ではありません。私は私の質問を更新しました。 – Smartmarkey