String cmd = "tar -xvf /home/creat/ext-4.0.7-gpl/eclipse-jee-indigo-SR2-linux-gtk-x86_64.tar.gz ";
Process p = Runtime.getRuntime().exec(cmd);
InputStream input = p.getInputStream();
StringBuffer buffer = new StringBuffer();
for (;;) 
{
int c = input.read();
if (c == -1)  break;
buffer.append((char) c);
}
String outputText = new String(buffer.toString().getBytes("iso-8859-1"), "utf-8");
input.close();
System.out.println(outputText);这是部分返回值
eclipse/plugins/org.eclipse.datatools.connectivity.apache.derby_1.0.102.v201107221459.jar
eclipse/plugins/org.eclipse.pde.ua.core_1.0.100.v20110516.jar
eclipse/plugins/org.eclipse.jdt.compiler.apt_1.0.400.v0110816-0800.jar
eclipse/plugins/org.eclipse.datatools.enablement.sap.maxdb.dbdefinition_1.0.0.v201107221507.jar
eclipse/plugins/org.eclipse.datatools.connectivity.oda.design_3.3.4.v201109211529.jar
eclipse/plugins/org.eclipse.team.cvs.ssh2_3.2.300.I20110511-0800.jar执行结果正确,但是这个是执行完了返回全部。如何能做到这个命令输出一行JAVA就获取一行?

解决方案 »

  1.   


                    BufferedReader br = null;
    String cmd = "tar -xvf /home/creat/ext-4.0.7-gpl/eclipse-jee-indigo-SR2-linux-gtk-x86_64.tar.gz "; 
    try 
    {
    Process ps = Runtime.getRuntime().exec(cmd);
    br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
    String temp = null;
    logger.info(cmd);
    while((temp = br.readLine())!= null)
    {
    System.out.println(temp); //获取一行
    }

    catch (IOException e) 
    {
    throw e;
    }
    finally
    {
    if(br!=null)
    {
    try { br.close(); } catch (IOException e) {}
    }
    }
      

  2.   


    问题解决了,但是我不明白为什么用readline就可以?这个inputstream也是及时读取的吗?
      

  3.   

    你看看api readline()这个方法是获取一行的内容.
      

  4.   


    我知道readline是一行的,我的意思是,这个InputStream是执行完才会获得到还是绑定刀执行的返回值?因为我用一开是的写法看时间是命令全部执行完才有了inputstream,为什么换成readline他是同步的?