原文:/ligaoyang/article/details/6755327
测试能拿返回值,但是在getErrorStream里,
import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.nio.charset.Charset;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String name1 = "C:/WINDOWS/system32/winmine.exe";
String name2 = "C:/test.cmd";//我CMD里面的内容是 netstat -ano 其他的也可以
String name3 = "java -version";
try {
System.out.println(execCMD(name1, 3));
System.out.println(execCMD(name2, 2));
System.out.println(execCMD(name3, 1));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @param path 要执行的文件路径或命令
* @param type 执行类型 1 shell命令 2 .CMD文件 3 .EXE文件
* @return 返回的值
* @throws IOException
*/
public static String execCMD(String path, int type) throws IOException {
final String COM_TITLE = "CMD /C ";
if (type == 1) {
path = COM_TITLE + path;
}
Process pro = Runtime.getRuntime().exec(path);//"cmd.exe /C R");// CMD Rserve");// --RS-enable-remote");try {pro.waitFor();} catch (InterruptedException e) {e.printStackTrace();}br = new BufferedReader(new InputStreamReader(pro.getInputStream(), Charset.forName("GBK")));String line = null;StringBuffer text = new StringBuffer("获得的信息是: \n");while ((line = br.readLine()) != null) {text.append(line); System.out.println(line);}BufferedReader ber = null;ber = new BufferedReader(new InputStreamReader(pro.getErrorStream(), Charset.forName("GBK")));String linee = null;StringBuffer texte = new StringBuffer("获得错误的信息是: \n");while ((linee = ber.readLine()) != null) {texte.append(linee);}
return text.length() > 9 ? text.toString() : text1.toString();
}
}