私はいくつかのコマンドを実行し、そのコマンドによって返されたすべてのエラーを表示する必要があるプログラムである時点で、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
}
この場合、私は複数の出力を期待するので、私は、複数のエラーがあることを知っていますが、写真で見ることができるように私は一つだけ取得します。
私はここでの鍵は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))
あなたが道より多くの行を取得するかどうかを確認します。