int k=0;
StringBuffer sb=new StringBuffer();
Process p1=Runtime.getRuntime().exec(cmd, env);
InputStream is=p1.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String temp="";
while((temp=br.readLine())!=null) {

sb.append(temp+"\r\n");
k++;
System.out.println(temp);
//System.out.println(k);
//if(k==5) break;
}
System.out.println(k);
//System.out.println(sb.toString());
fos.write(sb.toString().getBytes());
fos.flush();
br.close();

fos.close();

System.out.println("###over");
//p1.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}以上是代码的主要部分 就是执行一个命令 把输出结果写到一个文件里面  那个输出比较多 命令行大概1800多行吧  
现在的问题是 while循环里面 执行到最后一行后 就停滞了 在任务管理器里面 关闭这个进程 在java程序里  下面的代码才接着执行 写入文件等等  
这是什么原因? 我在命令行窗口运行那个命令的时候 执行完就回到了普通的提示状态比如C:\> 等等 并没有需要进一步操作 找个子进程为什么会阻塞呢》??
是不是因为标准输出内容太多? 如果是 有没有设么办法??

解决方案 »

  1.   

               int k=0;
                StringBuffer sb=new StringBuffer();
                Process p1=Runtime.getRuntime().exec(cmd, env);
                InputStream is=p1.getInputStream();
                BufferedReader br=new BufferedReader(new InputStreamReader(is));
                String temp="";
                while((temp=br.readLine())!=null) {
                    
                    sb.append(temp+"\r\n");
                    k++;
                    System.out.println(temp);
                    //System.out.println(k);
                    //if(k==5) break;
                }
                System.out.println(k);
                //System.out.println(sb.toString());
                fos.write(sb.toString().getBytes());
                fos.flush();            
                System.out.println("###over");
                //p1.waitFor();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                   br.close();
                   fos.close();
                }  catch (IOException e) {
                   e.printStackTrace();
                }
             }