コマンドを実行するときにどのように私はすべてのエラーを得ることができますか?

icortazar:

私はいくつかのコマンドを実行し、そのコマンドによって返されたすべてのエラーを表示する必要があるプログラムである時点で、Javaプログラムを開発しています。しかし、私は最初のものだけを表示することができます。

これは私のコードです:


String[] comando = {mql,"-c",cmd};

File errorsFile = new File("C:\\Users\\Administrator2\\Desktop\\errors.txt");

ProcessBuilder pb = new ProcessBuilder(comando);
pb.redirectError(errorsFile);

Process p = pb.start();
p.waitFor();

String r = errorsFile.getAbsolutePath();

Path ruta = Paths.get(r);
Charset charset = Charset.forName("ISO-8859-1");

List<String> fileContents = Files.readAllLines(ruta,charset);

if (fileContents.size()>0){
      int cont = 1;
      for(String str : fileContents){

              System.out.println("Error"+cont);
              System.out.println("\t"+str);
              cont++;
      }
}
else{
     //other code
}

この場合、私は複数の出力を期待するので、私は、複数のエラーがあることを知っていますが、写真で見ることができるように私は一つだけ取得します。 ここでは、画像の説明を入力します。

SylarBenes:

私はここでの鍵はProcessBuilderをさんがいることかもしれないと思うredirectError(File file)実際にありますredirectError (Redirect.to(file))

ProcessBuilderをクラスのOracleのドキュメントから:

これは便利な方法です。フォームredirectError(ファイル)の呼び出しは、呼び出しredirectError(Redirect.to(ファイル))とまったく同じように動作します。

ほとんどの例のIの使用を見てきましたRedirect.appendTo(File file)のではなくRedirect.to(file)ドキュメントには、理由を説明するかもしれません。

ProcessBuilder.RedirectのOracleのドキュメントから:

public static ProcessBuilder.Redirect to(File file)指定されたファイルへの書き込みへのリダイレクトを返します。サブプロセスが開始されたときに、指定したファイルが存在する場合は、その前の内容は破棄されます。

public static ProcessBuilder.Redirect appendTo(File file)戻り値指定したファイルに追加するリダイレクト。各書き込み操作は、最初のファイルの最後に位置を進め、その後、要求されたデータを書き込みます。

私が交換しようとするだろう

pb.redirectError(errorsFile) 

とともに

pb.redirectError(Redirect.appendTo(errorsFile))

あなたが道より多くの行を取得するかどうかを確認します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=208229&siteId=1