黑马程序员技术交流社区

标题: 回答姚伟涛同学的问题时,他的解决了而我出现了新问题。 [打印本页]

作者: 王勃    时间: 2012-4-24 00:58
标题: 回答姚伟涛同学的问题时,他的解决了而我出现了新问题。
问题可以参看姚伟涛的题目。我的有了新的问题,求帮忙!
题目:在一个进程里面启动cmd 然后输入ipconfig 和netstat之类的命令 并把输出打印到一个txt里面
我的回答是(我粘过来了,或者去他那里帮我看看):
嗯 楼上2位很对啊,但是我觉得开个线程比较好吧。所以我自己做了一个例子。也实现了将ipconfig命令的结果输入到记事本里面。
但是很让人崩溃的是,我的验证语句中BufferedReader读出来的竟然是null,让我很郁闷,调试了n久,打印的readLine字符串总是null。
说是while循环执行条件根本不成立,也就是readLine读出来的是null,郁闷啊。。。。。
大家给我看看,怎么一回事........
上图上代码:
  1. package com.heima;


  2. import java.io.BufferedReader;

  3. import java.io.IOException;

  4. import java.io.InputStream;

  5. import java.io.InputStreamReader;


  6. public class UseCmdTest2 {

  7.         public static void main(String[] args) throws IOException, InterruptedException {

  8. //我输出到f盘hell.txt,等会截图你们看看。。但是后面readLine读出来的为什么为null啊,,,,,,,求指教。

  9.         String[] cmd = {"cmd.exe", "/c","ipconfig -all",">F:\\hello.txt"};

  10.                 Process p = Runtime.getRuntime().exec(cmd);

  11.                 System.out.println(p.getInputStream().toString());

  12.                
  13.                 //在网上查到大家都是这么用的。。

  14.                 new Thread(new InputStreamDetection(p.getInputStream())).start();

  15.                 new Thread(new InputStreamDetection(p.getErrorStream())).start();

  16.                 p.getOutputStream().close();

  17.                 int exitValue = p.waitFor();

  18.                 //返回o说明成功了。返回1说明失败!

  19.                 System.out.println("return:"+exitValue);

  20.         }


  21. }


  22. class InputStreamDetection implements Runnable {


  23.         private InputStream is;

  24.         
  25.         public InputStreamDetection(InputStream ins) {

  26.                 this.is = ins;

  27.         }

  28.         @Override

  29.         public void run() {

  30.                 BufferedReader br = new BufferedReader(new InputStreamReader(is));

  31.                 //StringBuffer sb = new StringBuffer();

  32.                 String inputLine = null;

  33.                 try {

  34.                         System.out.println("br.readLine():"+br.readLine());

  35.                         while(null != (inputLine = br.readLine())) {

  36.                                 //sb.append(inputLine).append("\n");

  37.                                 System.out.println("inputLine:"+inputLine);

  38.                         }

  39.                 } catch (IOException e) {

  40.                         e.printStackTrace();

  41.                 }

  42.         }

  43. }
复制代码
myeclipse输出结果:

但是记事本里已经有结果了,图为:


作者: 王勃    时间: 2012-4-24 01:00
他的贴子链接:
不知道哪里出错求指教 http://bbs.itheima.com/forum.php ... 9&fromuid=20350

作者: 王勃    时间: 2012-4-24 01:28
在线的大神,求解释。都睡觉了吗。。。。。
作者: 刘少伟    时间: 2012-4-24 03:06
那个命令字符串数组,最后是执行完把结果写入到了C:\hello.txt文件。在流中应该就没有数据了,所以读出来是null
你debug一下,在28行,传入p.getInputStream()参数之后,InputStreamDetection对象的is里的buf数组已经是空的。
把19行的代码换成:
String[] cmd = {"cmd.exe", "/c","ipconfig -all"};
这样就可以打印了
作者: 王勃    时间: 2012-4-24 03:42
我勒个去,当时2了,没想这样写进txt,之后就被释放了。
谢谢你的帮助。上一个我的成功图。。。。。。

作者: 王勃    时间: 2012-4-24 03:43
本帖最后由 王明(1988) 于 2012-4-24 03:45 编辑

再次感谢我的大神。。。。。{:soso_e144:}{:soso_e128:}
作者: 姚伟涛    时间: 2012-4-24 08:42
好吧 你赢了~~~
作者: 王勃    时间: 2012-4-24 09:02
好吧 你赢了~~~

表示第一次不知道流写入记事本后,不会再存在,以为还在,想的天真了,借你的例子顺便给我补了一课。。哈哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2