import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; public class ProcessTest { public static void main(String[] args) { try { String cmd = null; cmd = "cmd.exe /c dir"; //可以输出 cmd = "cmd.exe /c java"; //可以输出 cmd = "cmd.exe /c java -version 2>&1"; //可以输出 cmd = "cmd.exe /c java -version"; //不可以输出 Process process = Runtime.getRuntime().exec(cmd); PrintWriter writer = new PrintWriter(process.getOutputStream()); new CommandThread(writer).start(); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String s = null; while ((s = br.readLine()) != null) { System.out.println(s); } Thread.currentThread().interrupt(); } catch (Exception e) { e.printStackTrace(); } } static class CommandThread extends Thread{ PrintWriter writer; BufferedReader br = null; CommandThread(PrintWriter writer){ this.writer = writer; br = new BufferedReader(new InputStreamReader(System.in)); this.setDaemon(true); } @Override public void run() { try { String cmd = null; while((cmd = br.readLine()) != null){ writer.println(cmd); writer.flush(); } } catch (IOException e) { e.printStackTrace(); } } } }
[code="java"]
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "java -version");
[/code]
因为使用字符串的最终会被jdk,转化为数组如上面的形式执行,请直接使用上面的形式做
LZ能否给出详细解释,最后能在控制台输出的思路是什么,求拍