我正在開發一個 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}在這種情況下,我知道有多個錯誤,所以我希望有多個輸出,但正如您在照片中看到的那樣,我只得到一個。
2 回答

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
我認為這里的關鍵可能是 ProcessBuilder 的redirectError(File file)
實際上是redirectError (Redirect.to(file))
.
來自 Oracle 的 ProcessBuilder 類文檔:
這是一種方便的方法。調用redirectError(file) 形式的行為與調用redirectError (Redirect.to(file)) 完全相同。
我見過的大多數例子都是使用Redirect.appendTo(File file)
而不是Redirect.to(file)
. 文檔可能會解釋原因。
來自 Oracle 的 ProcessBuilder.Redirect 文檔:
public static ProcessBuilder.Redirect to(File file)
返回重定向以寫入指定文件。如果子進程啟動時指定的文件存在,則其之前的內容將被丟棄。
public static ProcessBuilder.Redirect appendTo(File file)
返回重定向以附加到指定文件。每個寫操作首先將位置推進到文件末尾,然后寫入請求的數據。
我會嘗試更換
pb.redirectError(errorsFile)
和
pb.redirectError(Redirect.appendTo(errorsFile))
看看你是否能得到更多的線路。
添加回答
舉報
0/150
提交
取消