2015-12-21 68 views
0

我的代碼如下所示:Process.getInputStream()犯規返回所有行

public List<String> linux(String... commands) throws Exception{ 

    Process p = null; 
    ProcessBuilder builder = new ProcessBuilder(commands); 
    p = builder.start(); 

    BufferedReader reader= new BufferedReader(new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8)); 

    String line; 
    List<String> lines = new ArrayList<>(); 
    while((line = reader.readLine()) != null) lines.add(line); 

    return lines; 
} 

但它並沒有返回所有輸出。我在實際的遠程機器上嘗試過,大概有100多行,但我只有30行。我錯過了什麼嗎?

+2

機會是您嘗試捕獲其輸出的進程將缺失的行寫入其錯誤流(請考慮閱讀'p.errorStream()') – fardjad

+0

並且/或者您需要關閉進程的輸入流所以它不會等待你的任何事情。 – EJP

回答

0

聽起來像字符集不是UTF-8,只要發生'é'就會出錯。這可能是擴展ASCII,但如果這不起作用,我會試圖弄清楚它是什麼字符集。

由於BufferedReader的原因,它會在整個行上失敗。