JAvaでProcessで外部コマンドを実行して問題を解決する方法


Javaで外部コマンドを呼び出すので、次のコードを書きました.

Process p = Runtime.getRuntime().exec("my command ...");
int c = p.waitFor();
if (c != 0)
{
    System.out.prinln("    ");

    BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));

    for (String line = br.readLine(); line != null; line = br.readLine())
    {
        System.out.println(line);
    }    
}
   
実行された外部コマンドに出力がない場合、このコードは正常に動作しますが、実行された外部コマンドに出力がある場合、このプログラムは停止します.ストリームが読み込まれていないために詰まりが発生したと推定され、コードを

    public void test() throws IOException, InterruptedException
    {
        Process p = Runtime.getRuntime().exec("command...");
        String errorMsg = readInputStream(p.getErrorStream());
        String outputMsg = readInputStream(p.getInputStream());

        int c = p.waitFor();
        if (c != 0)
        {
            System.out.println("    :" + errorMsg);
        }else
        {//print command output
            System.out.println(outputMsg);
        }
    }

    private  String readInputStream(InputStream is) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        StringBuffer lines = new StringBuffer();
        for (String line = br.readLine(); line != null; line = br.readLine())
        {
            lines.append(line);
        }
        return lines.toString();
    }

すべて正常です.