小弟有个需求执行一个外部程序,然后取得它的输出流作为我java程序的输入流
        Process ps = Runtime.getRuntime().exec(cmd);
String str = (loadStream(ps.getInputStream()));
} private String loadStream(InputStream in) throws IOException {
int ptr = 0;
in = new BufferedInputStream(in);
StringBuffer buffer = new StringBuffer();
 while ((ptr = in.read()) != -1) {
 buffer.append((char) ptr);
 } return buffer.toString();
}现在 str里面的内容是“HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (27484862) 3 days, 4:20:48.62”,但是我只想要Timeticks后面的内容,也就是“(27484862) 3 days, 4:20:48.62”,请问如何取得呢?
另外想请问下有没有合适的流处理类能方便的完成我这个需求呢?第一天看输入输出流处理,还对那些类不熟悉,感觉这个面向字节流的BufferedInputStream类操作起来也不是很方便。

解决方案 »

  1.   

      in = new BufferedInputStream(in);
    这句代码谁写的?
      

  2.   


    改成
    BufferedInputStream in = new BufferedInputStream(in);
    这样吗?原来那样也能编译运行成功。
      

  3.   


      private static String loadStream(InputStream in) throws IOException {
             byte[] b = new byte[1024];
            in.read(b);
            return new String(b);
        }
    试试能否打印出东西来
      

  4.   

    3楼那个只是测试,他的后面是无效数据,你把它改为这样
        private static String loadStream(InputStream is) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        int tempByte = 0;
        while ((tempByte = is.read()) != -1)//逐个字节读取
    baos.write(tempByte);    
    } catch (Exception e) {
    }
    byte tempByteArray[] = baos.toByteArray();
    return new String(tempByteArray);    
        }
      

  5.   

    改过之后 能不能输出完整的字符串:
    HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (27484862) 3 days, 4:20:48.62如果不可以,你应该检查前面的代码
      

  6.   

    最后截取它就可以了str = "HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (27484862) 3 days, 4:20:48.62";
    str = str.substring(str.indexOf("Timeticks: ")+11);
    System.out.println(str);
      

  7.   


    1楼的代码已经能输出完整字符串的,我现在就想截取当中的“(27484862) 3 days, 4:20:48.62”
      

  8.   


    str = str.substring(str.indexOf("Timeticks: ")+11);
        System.out.println(str);