日期:2014-05-20 浏览次数:20749 次
package com.xuz.csdn.aug22; import java.io.IOException; import java.io.InputStream; public class RuntimeTest { public static void main(String[] args) { try { Process process = Runtime.getRuntime().exec("netstat -an"); InputStream is = process.getInputStream(); byte[] b = new byte[1024]; int size; while((size = is.read(b)) != -1) System.out.println(new String(b,0,size,"GBK")); } catch (IOException e) { e.printStackTrace(); } } }
------解决方案--------------------
向 process.getOutputStream 写
看这个连接http://blog.csdn.net/Sammy_chan/archive/2007/09/09/1778064.aspx
------解决方案--------------------
下面是很久以前写的模拟Eclipse的命令行的程序,也许对你有些帮助。
/////////////////////////////////////////////////////////////////////////////// // 类Test是用来测试的,即一个进程,它要求在控制台进行输入输出, 类Terminal模拟了Eclipse的控制台. /////////////////////////////////////////////////////////////////////////////// import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("Hi, Console"); System.out.println("Go, Console"); System.out.println("Please input ..."); Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); System.out.println("Your input is: " + str); } } /////////////////////////////////////////////////////////////////////////////// // 在类Terminal中有三个线程,一个用于监听proc正常的输出,一个监听proc的错误输出,一个用于 // 监听用户输入到控制台的数据,然后把这个数据输出到proc里(对于proc来说是输入) /////////////////////////////////////////////////////////////////////////////// import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Scanner; public class Terminal { public static void main(String[] args) throws IOException, InterruptedException { final Process proc = Runtime.getRuntime().exec("java Test"); // Normal input thread new Thread() { public void run() { InputStream in = proc.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); try { int ch = 0; while ((ch = reader.read()) != -1) { // 不用readLine是为了防止print没有回车的输出 System.out.print((char) (ch)); } System.out.println("Process end."); // 当读取到-1时,说明proc已经结束,所以本程序也应该结束了(或者结束输出线程) System.exit(0); } catch (IOException e) { e.printStackTrace(); } } }.start(); // Error input thread new Thread() { public void run() { InputStream in = proc.getErrorStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line = null; try { while ((line = reader.readLine()) != null) { System.err.println(line); } } catch (IOException e) { e.printStackTrace(); } } }.start(); // System.out.println("Sleep..."); // Thread.sleep(3000); // 程序在这里等待时,在Eclipse的控制台也能进行输入 // 当proc代表的程序结束后,Eclipse才强制在控制台不能进行输入 // Output thread. // 在输入中按下回车后取得当前行字符(去掉传进来的,只取输入的部分),然后转对方. new Thread() { public void run() { OutputStream out = proc.getOutputStream(); PrintWriter writer = new PrintWriter(out); Scanner scanner = new Scanner(System.in); String str = null; while ((str = scanner.nextLine()) != null) { writer.println(str); writer.flush(); } } }.start(); } } /////////////////////////////////////////////////////////////////////////////// // 执行方法: /////////////////////////////////////////////////////////////////////////////// 1. 先编译好这两个文件放在同一个文件夹里 2. 在终端里执行: java Terminal 3. 看终端里的提示进行操作